我在我的iPhone应用程序中使用Sqlite3,我显然随机地得到了一些不需要的回滚,但是我不知道这是否与我没有用
sqlite3_finalize
最终确定语句有关,因为据我所知 sqlite3_exec
会处理它。
我还发现了一些带有
sqlite3_prepare_v2
的 SELECT,但我没有最终确定,所以我知道我必须完成这些,但是我应该对 sqlite3_exec
中的 SELECT 做同样的事情吗?
我的陈述的一个例子是:
NSString *query=@"UPDATE books SET title='newName' WHERE id='21';";
if ((result=sqlite3_open([database UTF8String], &_database))==SQLITE_OK) {
result=sqlite3_exec(_database, [query UTF8String],NULL,NULL,&errorMsg);
if (result!=SQLITE_OK) {
printf("\n%s",errorMsg);
sqlite3_free(errorMsg);
}
sqlite3_close(_database);
}
关闭数据库之前我应该
sqlite3_finalize(result)
吗?
不。你不需要,因为调用
sqlite3_finalize()
函数来删除使用 sqlite3_prepare_v2()
或相关函数创建的 prepared 语句。
使用 sqlite3_exec 时无需调用 sqlite3_finalize()。 这是因为 sqlite3_exec 是 3 个函数的快捷方式:
您还可以在官方文档中阅读相关内容https://sqlite.org/c3ref/exec.html