Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.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
在iOS应用程序中实现sqlite3_busy_timeout()_Ios_Sqlite - Fatal编程技术网

在iOS应用程序中实现sqlite3_busy_timeout()

在iOS应用程序中实现sqlite3_busy_timeout(),ios,sqlite,Ios,Sqlite,我有一个iOS应用程序,它使用Sqlite3作为数据库。 这个应用程序是多线程的 我想确保应用程序不会从一个线程到另一个线程获取SQlite数据锁。我认为sqlite3\u busy\u timeout()可能就是答案 我的问题是将sqlite3\u busy\u timeout()放在哪里?我在appdelegate中打开与sqlite的连接。我应该在打开sqlite连接后立即放入sqlite3\u busy\u timeout(),还是每次执行数据调用时都需要放入 感谢您的帮助。这是来自:

我有一个iOS应用程序,它使用Sqlite3作为数据库。 这个应用程序是多线程的

我想确保应用程序不会从一个线程到另一个线程获取SQlite数据锁。我认为sqlite3\u busy\u timeout()可能就是答案

我的问题是将sqlite3\u busy\u timeout()放在哪里?我在appdelegate中打开与sqlite的连接。我应该在打开sqlite连接后立即放入sqlite3\u busy\u timeout(),还是每次执行数据调用时都需要放入

感谢您的帮助。

这是来自:

在任何给定时刻,特定数据库连接只能有一个忙处理程序。如果在调用此例程之前定义了另一个忙处理程序(使用sqlite3\u busy\u handler()),则会清除另一个忙处理程序

因此,如果您在多线程中执行数据调用,则会违反上述“单个繁忙处理程序”的要求

我建议将其放在应用程序代理中


希望这有帮助。

为什么不使用事务?这将确保表插入以原子方式完成

开始交易

 INSERT INTO "t1" VALUES(1, 'This is sample data', 3, NULL);

 INSERT INTO "t1" VALUES(2, 'More sample data', 6, NULL);

 INSERT INTO "t1" VALUES(3, 'And a little more', 9, NULL);

 COMMIT;

谢谢,是的。还有一个问题,如果数据库被锁定,sqlite3是否会继续尝试执行语句,直到定义的时间结束,而不做任何事情事务是好的,但与OP的问题无关,这是如何处理在另一个线程持有数据库锁时尝试运行查询/语句时产生的SQLITE_BUSY错误。