Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c sqlite未关闭读取事务_Objective C_Ios_Database_Multithreading_Sqlite - Fatal编程技术网

Objective c sqlite未关闭读取事务

Objective c sqlite未关闭读取事务,objective-c,ios,database,multithreading,sqlite,Objective C,Ios,Database,Multithreading,Sqlite,我在iOS应用程序中使用sqlite3,遇到了一个非常奇怪的问题 时代 我使用的是WAL,我所有的写操作都发生在一个托管线程上,该线程一次只允许执行一个操作,我的读操作使用不同的数据库句柄,一切正常。我看到的问题是,有时我的读取句柄会进入一种奇怪的状态,无法读取提交的数据。就像它有一个未提交的读取事务 我可以成功地写入数据库,并且我已经将结果导出到我的计算机,在那里我可以看到新写入的结果。然而,我的读取似乎是在一个较旧的时间点访问数据库的……就像它们被卡住了一样。如果我关闭应用程序并重新打开它,

我在iOS应用程序中使用sqlite3,遇到了一个非常奇怪的问题 时代

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

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


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

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

事实证明,在删除并重新创建一个数据库文件后,一些进程挂在一些过时的DB文件描述符上

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


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

其他写入事务是否在此状态下成功?是。我的写入使用不同的数据库句柄,如果我写入,然后导出数据库,我看到它们成功通过。奇怪的是新数据没有被读取…我的读取仍然访问旧数据。返回什么?您使用的是共享缓存模式还是共享缓存模式?