Могут ли разные соединения одной и той же базы данных sqlite начинать транзакции одновременно? - PullRequest
7 голосов
/ 18 декабря 2008

Я столкнулся со странной проблемой с sqlite3. Я получил разные соединения одного и того же файла базы данных, используя метод open (). соединение 1 начинает транзакцию, а соединение 2 начинает другую транзакцию, которая должна обновить несколько записей таблицы. Затем соединение 1 фиксирует транзакцию, затем соединение 2 фиксирует транзакцию. Но я обнаружил, что команда обновления соединения 2 никогда не обновляет запись в базе данных. Не исключение, выброшенное во время этой процедуры. Я не знаю, почему проблема возникает. Кто-нибудь может объяснить мне причину?

Ответы [ 2 ]

14 голосов
/ 18 декабря 2008

Если вы прочтете документацию по SQLite, вы увидите, что она поддерживает несколько подключений только для чтения, вы не можете выполнять запись в базу данных из нескольких подключений, поскольку она не предназначена для этого.

http://www.sqlite.org/faq.html#q5

5 голосов
/ 18 декабря 2008

Если вы не используете BEGIN IMMEDIATE для инициирования транзакций, вы рискуете откатить и повторить их. НАЧАЛО не делает никакой блокировки; последующие UPDATE или INSERT получают блокировку, и вам нужно проверить код результата, чтобы увидеть, не сработали ли они. См. Эту страницу на транзакциях и на этой блокировках .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...