iOS中的sqlite问题同时访问两个表

时间:2014-12-19 09:27:07

标签: ios objective-c iphone ios7 sqlite

我希望一切顺利,我对sqlite有一个疑问。 是否有可能两个不同的sqlite表访问一个。 恩。 我有表A ans B。可以同时访问A和B.插入更新表值。

我在myDatabase中有两个不同的表,Table1和table2(test_db.sqlite)。

表1仅供主线程访问。  表2将仅由后台线程访问。

现在让c。 我已经使用后台线程打开数据库连接...用于将值插入table2。  将值插入table2时............。my主线程尝试同时打开同一个数据库连接,从表1中检索数据......然后应用程序崩溃。

如何同时打开相同的数据库连接。

请检查此编辑

1 个答案:

答案 0 :(得分:0)

[编辑]

通过在不同的线程中访问数据库会遇到问题。您可以使用线程安全模式来解决此问题。

来自SQL docs

  

SQLite支持三种不同的线程模式:

     

单螺纹。在此模式下,所有互斥锁都被禁用,并且SQLite一次不能在多个线程中使用。

     

多线程。在这种模式下,多个线程可以安全地使用SQLite,前提是在两个或多个线程中不同时使用单个数据库连接。

     

序列化。在序列化模式下,SQLite可以被多个线程安全地使用而没有任何限制。

因此,您可以使用SQLITE_THREADSAFE编译时参数来选择线程模式。

我建议您在每个线程中打开一个不同的数据库连接,或者在序列化模式下重建SQLite(使用SQLITE_THREADSAFE = 1)。


老人回答:

如果您未提供收到的确切错误,则很难回答您的问题。但是,假设你的查询没问题,最可能的原因是你没有正确处理你的sqlite流。

我认为您的问题是您正在更新表“A”,然后在尝试更新表“B”时它会崩溃。这就是为什么你要创建一个查询来更新它们的原因。

因此,在重新使用sqlite3_stmt进行第二次查询之前,首先应调用sqlite3_finalize(yourStatement)从内存中释放语句,然后,如果要进行第二次查询,则调用再次sqlite3_prepare_v2,因此数据库已准备好接受下一个查询。