Как SQLite обрабатывает одновременные попытки чтения и записи для одного и того же соединения - PullRequest
0 голосов
/ 03 апреля 2020

Я читаю два разных подхода при использовании баз данных SQLite в мобильном приложении (например, и приложение Android). В этом случае не так много пользователей, которым нужен доступ к БД, только один пользователь - мое приложение. Таким образом, многие люди считают, что я должен создать соединение один раз и держаться за него в течение всего срока службы приложения. Другие по-прежнему считают, что вы должны открывать и закрывать каждый раз, когда вам нужно прочитать или написать.

Я испробовал оба подхода, и оба, похоже, работают. Однако при первом подходе, когда одно соединение остается открытым в течение всего срока службы приложения, как SQLite обрабатывает параллельные вызовы для чтения или записи в базу данных в одном соединении? Например, допустим, у меня была функция, которая была вызвана для обновления или вставки, и которая все еще не была завершена, в то время как другая функция вызывается для записи. Будет ли SQLite блокировать чтение и удерживать его до тех пор, пока запись не будет завершена, а затем все равно будет выполнять чтение после завершения записи, или будет выдано сообщение об ошибке при чтении, поскольку база данных «ЗАНЯТА»?

Меняется ли поведение, когда я нахожусь за разными столами по сравнению с одной и той же таблицей?

Как мы знаем, это может произойти в наши дни из-за асинхронных c паттернов.

Спасибо !!

...