Sqlite Finalize语句失败

时间:2011-09-02 20:23:35

标签: iphone objective-c

错误:sqlite3_finalize失败(数据库已锁定)。我也在每个视图中正确释放了内存。有人遇到过这个问题吗?

2 个答案:

答案 0 :(得分:4)

我认为你在SQLite界面上遇到了一些遗留问题。总而言之,当您sqlite3_step并且结果出错时,slite3_finalize将返回相同的错误。请注意来自sqlite3_step和其他SQLite调用的错误,并忽略来自slite3_finalize的错误。

每个sqlite3_finalize的SQLite文档:

  

如果对语句的最新评估没有遇到错误或者或者从未评估过该语句,那么sqlite3_finalize()将返回SQLITE_OK。如果对语句S的最新评估失败,则sqlite3_finalize(S)将返回相应的错误代码或扩展错误代码。

它讨论了最近对声明的评估,而不是最终确定。这远远不够明确,但文档中还有另一条评论:

  

Goofy界面警报:在旧版界面中,sqlite3_step() API始终返回一般错误代码SQLITE_ERROR,除了SQLITE_BUSY以外的任何错误, SQLITE_MISUSE。您必须致电sqlite3_reset()sqlite3_finalize(),以便找到更好地描述错误的特定错误代码之一。

接着说这是由v2 API修复的,但我认为这只是部分正确。使用v2 API时,sqlite3_step会直接返回错误代码。但是,没有sqlite3_finalize_v2。在我的测试中, sqlite3_finalize继续从sqlite3_step 返回错误代码。

换句话说:忽略sqlite3_finalize的错误。注意你几乎肯定得到的错误,但忽略了sqlite3_step

答案 1 :(得分:0)

“数据库被锁定”意味着(duh!)数据库被锁定。针对数据库的一些其他sqlite操作仍处于“挂起”状态,可能是因为您未能完成先前的查询,或者可能是因为在异步线程中正在进行查询。