2014-12-19 21 views
0

我希望一切顺利,我有一个关于sqlite的查询。 这可能是两个不同的sqlite表访问的。 ex。 我有表A和B.可以同时访问A和B.插入更新表值。iOS中的sqlite问题同时访问两个表

我有两个不同的表,myDatabase(test_db.sqlite)中的表1和表2。

表1只能由主线程访问。 表2将只能被后台线程访问。

现在让c。 我已经打开数据库连接使用后台线程...将值插入到表2中。 将值插入到表2中............。主线程尝试同时打开相同的数据库连接,以检索表1中的数据......以及应用程序崩溃。

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

请检查该编辑一个

+0

你应该知道关于连接和桥表 – 2014-12-19 09:28:41

+1

你可以提出这个问题吗?尝试在同一时间执行多个插入操作时,您会遇到什么错误?你用什么代码来做到这一点? – 2014-12-19 09:40:02

+0

通常,我们创建一个用于处理数据库操作的全局数据库实例。您可以单独为您的两个表启动数据库查询,以便在第一次成功时执行第二个数据库查询。因此,如果存在,可以避免任何含糊不清的情况。更多与我们分享您的代码。 – NewStackUser 2014-12-19 10:23:53

回答

0

[编辑]

您通过在不同的线程访问数据库中获取的问题。你可以通过使用线程安全模式来处理这个问题。

SQL docs

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

单线程。在这种模式下,所有的互斥锁都被禁用,并且SQLite不安全,可以同时在多个线程中使用。

多线程。在这种模式下,如果两个或多个线程中没有同时使用单个数据库连接,则SQLite可以安全地用于多个线程。

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

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

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


OLD答:

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

我想你的问题是你正在更新表“A”,然后当试图更新表“B”它崩溃。这就是为什么你试图创建一个查询来更新它们。

所以,重用你sqlite3_stmt使第二查询之前,你应该先打电话sqlite3_finalize(yourStatement)从内存中释放出来的语句,然后,如果你想第二个查询再打电话sqlite3_prepare_v2,所以数据库随后准备接受下一个查询。

+0

请检查更新的问题 – Harish 2014-12-19 10:54:38