在使用 sqlite3_exec 执行查询后我应该使用 sqlite3_finalize 吗?

问题描述 投票:0回答:2

我在我的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)
吗?

iphone objective-c sqlite
2个回答
11
投票

不。你不需要,因为调用

sqlite3_finalize()
函数来删除使用 sqlite3_prepare_v2() 或相关函数创建的
prepared 语句


1
投票

使用 sqlite3_exec 时无需调用 sqlite3_finalize()。 这是因为 sqlite3_exec 是 3 个函数的快捷方式:

  1. sqlite3_prepare_v2()
  2. sqlite3_step()
  3. sqlite3_finalize()

您还可以在官方文档中阅读相关内容https://sqlite.org/c3ref/exec.html

© www.soinside.com 2019 - 2024. All rights reserved.