2010-05-21 10 views
11

J'utilise l'interface sqlite c/C++.SQLITE (interface C/C++) - Comment valider une transaction

Voici mon scénario -

J'ai 3 tables (tables liées) disent A, B, C.

Maintenant, il y a une fonction appelée Set qui obtenir quelques entrées et sur la base sur les entrées insère des lignes dans ces trois tableaux. (parfois cela peut être une mise à jour dans l'une des tables)

Maintenant j'ai besoin de deux choses.

Un, je ne veux pas de fonctionnalité autocommit. En fait, je voudrais engager toutes les 1000 appels à Set fonction

En second lieu, dans la fonction de jeu lui-même, si je trouve que, après l'insertion dans deux tables, la troisième insertion échoue, alors je dois revenir, ceux notamment changements dans cela Set appel de fonction.

Maintenant, je ne vois aucune fonction sqlite3_commit exposée. Je vois seulement une fonction appelée sqlite3_commit_hook() qui est légèrement différente dans la documentation. Y a-t-il une fonction exposée à cet effet? ou Quel est le moyen d'atteindre ce comportement?

Pouvez-vous m'aider avec la meilleure approche de le faire.

Cordialement, Arjun

+0

ne pouvez-vous pas simplement exécuter les requêtes 'BEGIN' et' COMMIT'? – falstro

Répondre

3

pouvez-vous utiliser BEGIN, COMMIT et ROLLBACK instructions SQL dans le code C/C++?

23

Vous utilisez sqlite3_exec et transmettez respectivement "BEGIN TRANSACTION" et "END TRANSACTION".

// '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); 

Il y a synonymes de ces commandes SQL (comme COMMIT au lieu de END TRANSACTION). Pour référence, voici le SQLite documentation for transactions.

Questions connexes