Реализация sqlite3_busy_timeout () в приложении для iOS - PullRequest
1 голос
/ 23 июня 2011

У меня есть приложение для iOS, которое использует Sqlite3 в качестве базы данных. Приложение многопоточное.

Я хочу убедиться, что приложение не получает блокировки данных SQlite из одного потока в другой. Я думаю, что sqlite3_busy_timeout () может быть ответом.

Мой вопрос: куда мне поместить sqlite3_busy_timeout ()? Я открываю соединение с sqlite в appdelegate. Должен ли я ставить sqlite3_busy_timeout () сразу после открытия соединения sqlite, или мне нужно вводить каждый раз, когда я выполняю вызов данных.

Спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

Это от http://www.sqlite.org/c3ref/busy_timeout.html:

"Может быть только один обработчик занятости для определенного соединения с базой данных в любой момент времени. Если был определен другой обработчик занятости (ранее использовался sqlite3_busy_handler ())При вызове этой подпрограммы очищается другой занятый обработчик. "

Так что, если вы выполняете вызовы данных в нескольких потоках, вышеупомянутое требование" одного занятого обработчика "будет нарушено.

Я бы порекомендовал поместить его в делегат приложения.

надеюсь, это поможет.

0 голосов
/ 23 июня 2011

почему бы не использовать транзакции вместо этого?это обеспечит атомарную вставку в таблицу.

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...