LINUX.ORG.RU

SQLite и несколько потоков

 ,


0

1

В каждом потоке используется свое соединение через QSqlDatabase::cloneDatabase и отдельная транзакция, при попытке инсерта получаю «database is locked Unable to fetch row». Кто сталкивался с таким?

это ограничение sqlite. Читать могут все одновременно, а вот писать - только по очереди.

gnunixon ★★★ ()
Ответ на: комментарий от panter_dsd

sqlite не позволяется нормально обрабатывать обращение к одной бд из нескольких мест одновременно

или тебе надо сихнронизоваться, чтоб такого не было (вроде можно это делать средствами самой sqlite). Или иметь одно обращение - что лучше

namezys ★★★★ ()

PRAGMA journal_mode = WAL

если версия sqlite >= 3.7.0

wota ★★ ()
Ответ на: комментарий от panter_dsd

Это значит только то, что сервер у тебя внутри приложения существует.

trex6 ★★★★★ ()

В официальной доке на сабж есть раздел Using SQLite in Multi-Threaded Applications - там все достаточно подробно описано по теме. Сам лично использую SQLite в многопоточном серверном приложении - все работает.

illy ()

В каждом потоке используется свое соединение

Нужно использовать одно и то же соединение во всех потоках. Только sqlite должен работать в serialized mode. В таком случае он сам внутри себя синхронизирует ваши запросы (которые могут сыпаться параллельно из разных потоков). Однако это только синхронизация, и внутри себя sqlite все равно выполнит инсерты последовательно.

selim ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.