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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.