Как фиксировать транзакцию SQLite в C/C++?

Я использую sqlite c/c ++ интерфейс.

У меня есть 3 таблицы (связанные таблицы), говорят что A, B, C. Теперь, существует функция под названием Набор, которые получают некоторые исходные данные, и на основе исходных данных вставляет строки в эти три таблицы. (иногда это может быть обновление в одной из таблиц),

Теперь мне нужны две вещи. Один, я не хочу функцию автоматической фиксации. В основном я хотел бы фиксировать после каждых 1 000 вызовов Функции множества

Во-вторых, в самой функции множества, если я нахожу, что после вставки в две таблицы, третьи сбои вставки, затем должен вернуться, те конкретные изменения в том вызове Функции множества.

Теперь я не вижу, что любой sqlite3_commit функционирует выставленный. Я только вижу функцию, вызванную sqlite3_commit_hook (), который немного различен в документации.

Там какая-либо функция выставляется с этой целью? или Что путь состоит в том, чтобы достигнуть этого поведения?

Можно ли помочь мне с лучшим подходом выполнения этого.

16
задан jww 25 March 2019 в 14:32
поделиться

2 ответа

можно ли использовать sql-операторы BEGIN, COMMIT и ROLLBACK внутри кода на C/C++?

2
ответ дан 30 November 2019 в 16:36
поделиться

Вы используете 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 для транзакций .

36
ответ дан 30 November 2019 в 16:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: