0

我正在更新 sqlite 表中的列,它工作正常,但我认为当每次调用方法来更新值时,我认为如果有一条记录,则将更新值混合到其他记录,那么如果我们有两条记录就可以了,那么我认为它得到了混合在这里是更新的代码

    - (void)addContentViews:(NSString *)dbPath {

   AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

   NSLog(@"The Content ID is %@",appDelegate.contentID);

  //if(updateStmt == nil) {


    NSLog(@"The Content ID is %@",appDelegate.contentID);


    NSString*select = [NSString stringWithFormat:@"UPDATE ContentMaster Set Views = ? where contentID ='%@'",appDelegate.contentID];


    const char *sql = [select UTF8String]; 


    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
    {    

        if(sqlite3_prepare_v2(database, sql, -1, &updateStmt, NULL) != SQLITE_OK)
            NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));

         // }


   sqlite3_bind_text(updateStmt,1, [views UTF8String], -1, SQLITE_TRANSIENT);

         if(SQLITE_DONE != sqlite3_step(updateStmt))
    NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
     //else
    //SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid


   // contentID = sqlite3_last_insert_rowid(database);


//Reset the add statement.


    sqlite3_finalize(updateStmt);
    }

 }
4

1 回答 1

0

如果您想确认更新了多少行,请在调用sqlite3_total_changes(database)之前和之后调用,查看这两个值之间的差异,这将告诉您更新了多少行。

如果不止一行得到更新,那么我怀疑你有不止一行具有相同的contentID值。您应该在模拟器上查看您的数据库(在模拟器上,它位于~/Library/Application Support/iPhone Simulator文件夹中……如果您没有看到Library列出的文件夹(因为它通常是隐藏的),您可以使用终端命令行取消隐藏它chflags nohidden ~/Library)。sqlite3只需在您选择的 SQLite 工具(终端命令行程序或您喜欢的任何工具)中打开该数据库并查看它。

于 2013-11-08T06:26:26.830 回答