Я использую sqlite c/c ++ интерфейс.
У меня есть 3 таблицы (связанные таблицы), говорят что A, B, C. Теперь, существует функция под названием Набор, которые получают некоторые исходные данные, и на основе исходных данных вставляет строки в эти три таблицы. (иногда это может быть обновление в одной из таблиц),
Теперь мне нужны две вещи. Один, я не хочу функцию автоматической фиксации. В основном я хотел бы фиксировать после каждых 1 000 вызовов Функции множества
Во-вторых, в самой функции множества, если я нахожу, что после вставки в две таблицы, третьи сбои вставки, затем должен вернуться, те конкретные изменения в том вызове Функции множества.
Теперь я не вижу, что любой sqlite3_commit функционирует выставленный. Я только вижу функцию, вызванную sqlite3_commit_hook (), который немного различен в документации.
Там какая-либо функция выставляется с этой целью? или Что путь состоит в том, чтобы достигнуть этого поведения?
Можно ли помочь мне с лучшим подходом выполнения этого.
можно ли использовать sql-операторы BEGIN, COMMIT и ROLLBACK внутри кода на C/C++?
Вы используете sqlite3_exec и передаете «НАЧАТЬ ТРАНЗАКЦИЮ» и «КОНЕЦ ТРАНЗАКЦИИ» соответственно.
// 'db' is the pointer you got from sqlite3_open*
sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, NULL);
// Any (modifying) SQL commands executed here are not committed until at the you call:
sqlite3_exec(db, "END TRANSACTION;", NULL, NULL, NULL);
У этих команд SQL есть синонимы (например, COMMIT
вместо END TRANSACTION
). Для справки, вот документация SQLite для транзакций .