我對IOS編程非常陌生,所以我不太確定如何最好地解決這個問題。iOS sqlite更新查詢問題
我有一個正在顯示在桌面視圖上的事件的數據庫,當你選擇其中一個項目時,它顯示了詳細信息以及將其保存爲「最喜歡」的選項,該選項只更新了數據庫中的列,它設置爲1。
我有一個看起來已設置爲1
我所遇到的問題有自己的「最愛」的所有實例第二個表的看法是,我只是想出如何獲得「updateItem」數據庫查詢將從您選擇的項目路徑起作用。由於每個tableview在不同路徑上顯示相同的項目,因此當您使用「收藏夾」表格視圖時,「updateItem」查詢正在更新數據庫中的錯誤項目。
我知道在UpdateItemAtID方法中,它使用aryDatabase,並且收藏夾查詢使用aryDatabaseFav。我不得不創建第二個數組來解決收藏夾tableview,也許有更好的方法來獲得我想要的所有東西,只需要原始的aryDatabase數組而不是兩個不同的數組。
這裏是我有兩個選擇語句以及更新查詢的代碼,有沒有更好的方式,我可以解決需要項目的路徑?我的理解
-(void)readItems {
if (!database) return; // earlier problems
if (!selStmt)
{
const char *sql = "SELECT * FROM Events;";
if (sqlite3_prepare_v2(database, sql, -1, &selStmt, NULL) != SQLITE_OK)
{
selStmt = nil;
}
}
if (!selStmt)
{
NSAssert1(0, @"Can't build SQL to read items [%s]", sqlite3_errmsg(database));
}
// loop reading items from list
[aryDatabase removeAllObjects]; // clear list for rebuild
int ret;
while ((ret=sqlite3_step(selStmt))==SQLITE_ROW)
{ // get the fields from the record set and assign to item
//bindings omitted
[aryDatabase addObject:se]; // add to list
[se release]; // free item
}
sqlite3_reset(selStmt); // reset (unbind) statement
selStmt = nil;}
-(void)readFavItems {
if (!database) return; // earlier problems
if (!selStmt)
{
const char *sql = "SELECT * FROM Events WHERE mySchedule = 1;";
if (sqlite3_prepare_v2(database, sql, -1, &selStmt, NULL) != SQLITE_OK)
{
selStmt = nil;
}
}
if (!selStmt)
{
NSAssert1(0, @"Can't build SQL to read items [%s]", sqlite3_errmsg(database));
}
// loop reading items from list
[aryDatabaseFav removeAllObjects]; // clear list for rebuild
int ret;
while ((ret=sqlite3_step(selStmt))==SQLITE_ROW)
{ // get the fields from the record set and assign to item
//bindings omitted
[aryDatabaseFav addObject:se]; // add to list
[se release]; // free item
}
sqlite3_reset(selStmt); // reset (unbind) statement
selStmt = nil;}
-(void)updateItemAtID:(NSIndexPath *)path {
singleEvent *i = (singleEvent *)[aryDatabase objectAtIndex:path.row];
int ret;
const char *sql = "UPDATE events SET mySchedule = ? WHERE _id = ?;";
if (!updStmt)
{ // build update statement
if ((ret=sqlite3_prepare_v2(database, sql, -1, &updStmt, NULL))!=SQLITE_OK)
{
NSAssert1(0, @"Error building statement to update items [%s]", sqlite3_errmsg(database));
}
}
// bind values to statement
NSInteger m = i.intId;
sqlite3_bind_int(updStmt, 1, m);
NSInteger p = i.intPk;
sqlite3_bind_int(updStmt, 2, p);
if ((ret=sqlite3_step(updStmt)) != SQLITE_DONE)
{
NSAssert1(0, @"Error updating values [%s]", sqlite3_errmsg(database));
}
sqlite3_reset(updStmt);
}