Нормально ли, что в журнале отката хранится максимум 1 КБ и запросы с автоматической фиксацией, транскрипция которых еще не завершена?

#c #sqlite

#c #sqlite

Вопрос:

Я использую Sqlite3Wrapper в своем проекте, и я заметил странное поведение: я начинаю транзакцию и выполняю множество запросов, один за другим. Проблема, с которой я сталкиваюсь, заключается в том, что журнал хранит максимум 1 КБ данных до его автоматической фиксации. Этот процесс повторяется до тех пор, пока все данные не будут сохранены в базе данных. Это нормальное поведение?

Комментарии:

1. Что вы имеете в виду под «автоматической фиксацией»? Если бы действительно была фиксация, ваша явная фиксация завершилась бы неудачей.

Ответ №1:

Если вы вызываете BEGIN , ничего не будет зафиксировано, пока вы не вызовете COMMIT или ROLLBACK

Любая команда, которая изменяет базу данных (в основном, любая команда SQL, отличная от SELECT), автоматически запустит транзакцию, если она еще не вступила в силу. Автоматически запускаемые транзакции фиксируются при завершении последнего запроса.

Транзакции можно запускать вручную с помощью команды BEGIN . Такие транзакции обычно сохраняются до следующей команды ФИКСАЦИИ или ОТКАТА.

Если вы не используете BEGIN , вы по умолчанию будете работать в режиме автоматической фиксации. Вы можете проверить это через sqlite3_get_autocommit .

Режим автоматической фиксации включен по умолчанию. Режим автоматической фиксации отключается оператором BEGIN . Режим автоматической фиксации повторно включается ФИКСАЦИЕЙ или ОТКАТОМ.

Комментарии:

1. Дело в том, что в моей db saver есть только 2 функции-члена, которые связаны с транзакциями: CommitTranscation и beginTransaction. Оба они используют адаптер db следующим образом: «m_dataBase-> execDML («начать транзакцию»);». Я поместил в них точки останова, но у меня не было успеха. Тем не менее, я вижу множество транзакций — embed.gyazo.com/a183859f5e65d6d97c2e289f90cda315.gif