我有一个在 Sqlite3 数据库上执行搜索的查询。它除了使用阅读器阅读外什么都不做。 对于每个找到的匹配项,它都会调用 UI 的回调来更新结果 View 。
在运行此搜索时,我点击了 UI 中的一个按钮,该按钮将在新线程中执行一些其他操作。最后它应该删除搜索 Controller 的 View 并显示一个新的 Controller 。
但是,在某些时候,触发的操作想要写入数据库。它就卡在那里,最终我会看到数据库被锁定的异常。
有趣的是,搜索阅读器也不继续,这是一个死锁。
我是否必须以某种特殊方式打开数据库以支持多线程使用?连接的构造函数是什么?
最佳答案
MonoTouch 5.1+ 提供了一个 API让您选择要与 SQLite 一起使用的线程模型。
SqliteConnection.SetConfig (SQLiteConfig.MultiThread);
这映射到一些连接 options SQLite 库。
更新:如果您使用的是早期版本的 MonoTouch(例如 4.2 和 5.0.x 之间),您可以使用附加到错误报告的二进制文件 #652 (按照说明操作)或将补丁(p/调用和枚举)复制粘贴到您自己的应用程序中。
关于objective-c - iPhone 中的 Sqlite3 数据库被锁定 - 如何避免?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8325601/