2

我在 iOS 应用程序中使用 sqlite3 并且多次遇到一个非常奇怪的问题。

我正在使用 WAL,我的所有写入都发生在一个托管线程上,该线程一次只允许 1 个操作,我的读取使用不同的数据库句柄,一切正常。我看到的问题是有时我的读取句柄会进入这种奇怪的状态,它不会读取提交的数据。就像它有一个未提交的读取事务......

我可以成功写入数据库,并将结果导出到我的计算机,在那里我可以看到新写入的结果。但是,我的读取似乎是在较早的时间点访问数据库......就像他们被卡住了一样。如果我关闭应用程序并重新打开它,它们会很好并且它们会读取新提交的数据,但我想知道我的应用程序是如何陷入这种状态的。

任何帮助,将不胜感激。提前致谢。

4

1 回答 1

1

我遇到了完全相同的问题,但是在带有 SQLite3 3.7.7.1 的 Debian Lenny(内核 2.6.33)上。

事实证明,在我删除并重新创建数据库文件后,我的一些进程挂在了一些陈旧的数据库文件描述符上。

我通过确保在再次重新创建数据库之前杀死所有使用数据库的进程来修复它。

通过摆脱旧进程,文件句柄也被删除。

于 2012-11-20T00:11:43.677 回答