我在iOS应用程序中使用sqlite3,并且多次遇到一个非常奇怪的问题。
我使用的是WAL,我所有的写操作都发生在一个托管线程上,这个线程一次只允许一个操作,我的读操作使用了不同的数据库句柄,一切都运行得很好。我看到的问题是,有时我的读句柄会进入一种奇怪的状态,它不会读取提交的数据。就像它有一个未提交的读事务...
我可以成功地写入数据库,并且已经将结果导出到我的计算机上,在那里我可以很好地看到新写入的结果。然而,我的读取似乎是在一个较旧的时间点访问数据库……这就好像它们被卡住了。如果我关闭应用程序并重新打开它,它们是正常的,并且它们读取了新提交的数据,但我想知道我的应用程序是如何卡在这种状态的。
任何帮助都将不胜感激。提前谢谢。
发布于 2012-11-20 08:11:44
我遇到了完全相同的问题,但在Debian Lenny (内核2.6.33) w/ SQLite3 3.7.7.1上。
事实证明,在我删除并重新创建数据库文件后,一些进程挂起了一些过时的DB文件描述符。
我修复了它,确保所有使用数据库的进程在重新创建数据库之前都被杀死了。
通过摆脱旧进程,文件句柄也被删除。
https://stackoverflow.com/questions/12647936
复制相似问题