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

我有一个使用Sqlite3作为数据库的iOS应用程序。 该应用程序是multithreading。

我想确保应用程序不会从一个线程获取SQlite数据locking到另一个线程。 我认为sqlite3_busy_timeout()可能是答案。

我的问题是我在哪里把sqlite3_busy_timeout()? 我在appdelegate中打开连接到sqlite。 我应该在打开sqlite连接之后立即将sqlite3_busy_timeout()放入,或者每次执行数据调用时都需要放入sqlite3_busy_timeout()。

感谢你的帮助。

为什么不使用交易呢? 这将确保表格插入是自动完成的。

BEGIN TRANSACTION;

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; 

这是从http://www.sqlite.org/c3ref/busy_timeout.html

如果在调用这个例程之前定义了另一个忙处理程序(使用sqlite3_busy_handler()),那么另一个忙处理程序就被清除了。

所以如果你在multithreading中执行数据调用,那么上面的“单个忙处理程序”的要求将被违反。

我会build议把它放在应用程序的代表。

希望这可以帮助。