这是我第一次遇到 SQLITE 中的 UPDATE 语句。根据我的发现,我想出了这个方法,但是,它不起作用)语句本身工作正常,我已经检查过了。由于某种原因,result 和 SQLITE_OK 的值等于 0。那么,到底是哪里出了问题呢?谢谢。
- (BOOL) archiveArticle:(Article *) article
{
NSString *sql = [NSString stringWithFormat:@"UPDATE UserArticle SET archived = ? WHERE article_id=? AND user_id=?"];
sqlite3_stmt *update;
int result = sqlite3_prepare_v2(self.db, [sql UTF8String], -1, &update, NULL);
NSLog(@"archiveArticle: Before IF %d %d",result, SQLITE_OK);
if (result == SQLITE_OK){
NSLog(@"archiveArticle: Article was archived!");
return true;
}else{
NSLog(@"archiveArticle: Error while creating update statement. %s", sqlite3_errmsg(self.db));
return false;
}
sqlite3_bind_int(update, 1, 1);
sqlite3_bind_int(update, 2 , article.article_id);
sqlite3_bind_int(update, 3 , 16);
char* errmsg;
sqlite3_exec(self.db, "COMMIT", NULL, NULL, &errmsg);
if(SQLITE_DONE != sqlite3_step(update))
NSLog(@"Error while updating. %s", sqlite3_errmsg(self.db));
sqlite3_finalize(update);
return false;
}
最佳答案
问题在于这部分代码:
if (result == SQLITE_OK){
NSLog(@"archiveArticle: Article was archived!");
return true;
}else{
NSLog(@"archiveArticle: Error while creating update statement. %s", sqlite3_errmsg(self.db));
return false;
}
您正在从该方法返回,因此不会执行剩余的代码。所以
sqlite3_exec(self.db, "COMMIT", NULL, NULL, &errmsg);
不会工作,数据也不会更新。
关于ios - Objective C,SQLite,创建更新语句时出错。不是错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24326854/