我正在尝试使用此函数更新表中的列:
-(void)updateID:(NSString*)ID{
NSString *queryInsertAndUpdate =
[NSString stringWithFormat:
@"UPDATE mytable set ID = '%@' limit 1",ID];
const char* query=[queryInsertAndUpdate UTF8String];
sqlite3_stmt *stmt = nil;
sqlite3_exec(_database, "BEGIN EXCLUSIVE TRANSACTION", 0, 0, 0);
if (sqlite3_prepare_v2(_database, query, -1, &stmt, NULL) == SQLITE_OK) {
if(sqlite3_step(stmt) == SQLITE_DONE) {
NSLog(@"Query Executed");
} else {
NSLog(@"Query NOT Executed: %s", sqlite3_errmsg(_database));
}
sqlite3_finalize(stmt);
}else{
NSLog(@"Statement NOT Prepared: %s", sqlite3_errmsg(_database));
}
}
当我运行这个函数时,一切正常,并且列得到更新。我知道这是因为我就特定表调用了数据库并检查了结果。问题是,当我调用从另一个类读取表条目的同一个函数时,我得到了不同的结果。
具体来说,当我打电话时:
AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
[appDelegate initViewController];
在 initViewController
中,我调用了读取表的同一函数,并在更新前获取了列的条目。
为什么会这样?如果需要,我可以提供更多代码。
最佳答案
如果你有一个“BEGIN EXCLUSIVE TRANSACTION”,那么你还需要有一个COMMIT TRANSACTION
关于ios - 无法更新数据库列 - Objective C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53596431/