Ошибка «База данных заблокирована» в SQLite3 с Qt - PullRequest
1 голос
/ 16 июня 2011

Я использую SQLite3 во встроенной системе и на x86 в приложении Qt. Я испытываю общую ошибку «База данных заблокирована», когда несколько потоков пытаются прочитать / записать базу данных.

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

Путем небольшого изменения параметра QSQLITE_BUSY_TIMEOUT (для очень большого значения: 10000000) я решил эту проблему в системе x86 и во встроенной системе, но в последнем случае только тогда, когда транзакции не используются. К сожалению, мне нужно использовать транзакции для всей работы каждого потока.

Мой вопрос: не поддерживается ли SQLite3 для чтения / записи из / в базу данных одновременно при использовании транзакций? Почему он просто не ждет все необходимое время, чтобы получить замок? Может быть, я неправильно настроил?

1 Ответ

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

Чтение НАЧАЛО СДЕЛКИ инструкция SQL. В нем явно сказано, что поведение транзакции по умолчанию отложено, что объясняет ошибку, которую вы видите. Также прочитайте эту ссылку для другого хорошего объяснения.

Так что вам нужно запустить SQL как «BEGIN IMMEDIATE TRANSACTION», и все остальные должны сделать то же самое.

Вы можете найти пример исходного кода здесь . Обратите внимание на

bool SqlEngine::beginTransaction()

и сделайте то же самое в своем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...