SQLite соединение. БД только на чтение.
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 12.12.21 08:17
Оценка:
Приветствую.
В интернетах не нашёл однозначного правила соединения с SQLite, кроме следующего: если обращения редкие — закрывайте соединения; если частые — держите открытым постоянно.
У меня, грубо говоря, два потока:
1. поток логики: в начале вычитал нужные данные из таблицы, держит их в памяти и с БД делает только CUD, без R. Потому что R очень много. Т.е. тут соединение открыто постоянно.
2. поток UI: каждые N времени обновляет данные формочек (или по клику), и хотя он в основном использует обращение к БД в памяти, у него так же есть обращение к более редко используемой таблице (раз в 10 секунд), когда он вычитывает непосредственно из БД. Т.е. тут используется кусочек открытия соединения по необходимости с последующим закрытием.
Всё норм?

В общем, оно работает, но есть одна проблема: изредка программа падает с ошибкой, что ДБ находится в режиме readOnly. Не часто, но бывает.
Ничего конкретного не нагуглил, но стал подозревать либо kaspersky, либо onedrive (проект держу в синхронизируемой папке).
Начал с onedrive: выключаешь его на 8 часов — ошибка пропадает. Включается — через какое-то время появляется. Проверял неделю — как часы.
Т.е. получается, что onedrive лочит файл БД, чтобы сохранить его в облаке. Или что-то подобное.

Вопросы:
1. Как думаете, если переведу все соединения с БД на открываемые по требованию — это поможет? Это будет более правильным?
2. Поможет ли (будет ли более правильным), если изменения в БД буду делать асинхронно?
3. Есть ли механизм, который проверяет, что БД доступна для изменений?
Вселенная бесконечна как вширь, так и вглубь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.