Ошибка "База данных заблокирована" в SQLite3 с Qt

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

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

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

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

1 ответ

Решение

Прочитайте BEGIN TRANSACTION оператор SQL. В нем явно сказано, что поведение транзакции по умолчанию отложено, что объясняет ошибку, которую вы видите. Также прочитайте эту ссылку для другого хорошего объяснения.

Поэтому вам нужно запустить ваш SQL как "НАЧАЛО НЕМЕДЛЕННОЙ СДЕЛКИ", и все остальные должны сделать то же самое.

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

bool SqlEngine::beginTransaction()

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

Другие вопросы по тегам