В COMMIT, если вы видите ошибку SQLITE_BUSY, вы должны повторить попытку
КОМИТ. Это может сработать. Еще лучше установить обратный вызов занятого обработчика
для обработки SQLITE_BUSY.
Другая причина сбоя COMMIT - это отложенный внешний ключ.
нарушение. Если это произойдет, вы можете исправить нарушение FK и
затем COMMIT. Трудно увидеть, что это делает беспилотное приложение.
Другие ошибки, которые вы, вероятно, должны просто оставить и ОТКРЫТЬ
сделка.
Если возникает ошибка ввода-вывода или OOM, текущая транзакция может быть
откат. Это связано с тем, что некоторые ошибки ввода / вывода покидают SQLite
не уверены, совпадают ли его внутренние структуры данных
что на самом деле на диске. Если бы мы продолжили в этой точке
база данных может быть повреждена.
Вы можете проверить, был или нет откат транзакции
SQLite с использованием API sqlite3_get_autocommit ().
Если во время COMMIT возникает ошибка ввода-вывода или OOM, транзакция может
все еще были совершены. Это может произойти, например, если
пользователь вырывает карту памяти из камеры так же, как
сделка совершена. Это вообще невозможно узнать
если данные попали на постоянный носитель без чтения
БД и проверка на уровне приложения.