【发布时间】:2012-12-14 04:44:42
【问题描述】:
我正在 iOS 上编写一个使用 fmdatabase 包装的 sqlite3 的应用程序。我遇到的问题是,在某些时候,我的程序卡在 FMDatabase 库内的循环中,特别是一个调用 sqlite3_step 并发现数据库繁忙的函数,然后一遍又一遍地重试。
我正在寻找一般的调试工具和技巧,因为在这里给出我的整个设置会太过分了。一些可能会产生影响的事情,我打开了一个数据库句柄,该句柄指向一个已经在另一个线程中拥有句柄的数据库。 sqlite3_threadsafe() 返回 2,所以我知道它已启用。我还通过一个非常简单的选择和更新语句测试了这个新连接。当我让我的程序运行时,当它尝试在数据库上运行更新时,我卡住了。
我的程序自己创建的更新语句没有错误,因为当我不打开两个连接时,此查询运行良好。然而,我看不出哪里出错了……
任何关于我可能出错的地方的帮助或提示将不胜感激。
【问题讨论】:
-
你提交更新了吗?另见the unlock notify scheme
-
fmdatabase 调用 sqlite3_finalize 但不提交。我承诺了,但似乎没有任何区别