错误:sqlite3_finalize失败(数据库已锁定)。我也在每个视图中正确释放了内存。有人遇到过这个问题吗?
答案 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操作仍处于“挂起”状态,可能是因为您未能完成先前的查询,或者可能是因为在异步线程中正在进行查询。