Russian Qt Forum

Qt => Базы данных => Тема начата: Fess от Май 22, 2011, 16:21



Название: QSQLite, доступ из разных процессов
Отправлено: Fess от Май 22, 2011, 16:21
Судя по тому, что говорит ассистент реализация драйвера для SQLite потокобезопасна - все последующие потоки, пожелавшие обратиться за чем-либо к базе будут ждать до
QSQLITE_BUSY_TIMEOUT. Но что, если другое приложение через этот же Qt драйвер попытается открыть базу? Получит ли оно исключение, или будет ждать таймаута?


Название: Re: QSQLite, доступ из разных процессов
Отправлено: LisandreL от Май 22, 2011, 17:59
Будет ждать, если не установлено PRAGMA locking_mode = EXCLUSIVE


Название: Re: QSQLite, доступ из разных процессов
Отправлено: Fess от Май 22, 2011, 18:36
Но эта опция влияет только на время наложения блокировки - блокировка при выполнении запроса / блокировка на все время соединения..
Меня интересует как будет вести себя другой процесс при доступе к заблокированной базе данных через Qt Sqlite вне зависимости он того сколько эта блокировка будет действовать.


Название: Re: QSQLite, доступ из разных процессов
Отправлено: LisandreL от Май 22, 2011, 19:37
Но эта опция влияет только на время наложения блокировки - блокировка при выполнении запроса / блокировка на все время соединения...
Нет, это опция влияет на метод блокирования.
При NORMAL блокирование производится внутренними механизмами БД.
При EXCLUSIVE производится блокировка файла БД на уровне файловой системы, поэтому второй процесс так залоченную БД не сможет открыть даже для чтения.