2010-05-21 11 views
11

Ich benutze sqlite c/C++ Schnittstelle.SQLITE (C/C++ Schnittstelle) - Wie man eine Transaktion festlegt

Hier ist mein Szenario -

Ich habe 3 Tabellen (bezogene Tabellen) sagt A, B, C.

Jetzt gibt es eine Funktion namens Set, das einige Eingänge und basieren bekommen an den Eingängen fügt Zeilen in diese drei Tabellen ein. (manchmal kann es ein Update in einer der Tabellen sein)

Jetzt brauche ich zwei Dinge.

Eins, ich möchte nicht Autocommit-Funktion. Grundsätzlich würde Ich mag nach jeder 1000 Anrufen Sets Funktion

Zweitens innerhalb der eingestellten Funktion selbst, begehen, wenn ich finde, dass in zwei Tabellen nach dem Einlegen der dritte Einsatz ausfällt, dann muß ich zurückkommen, die insbesondere Änderungen in diesem Set Funktionsaufruf.

Jetzt sehe ich keine sqlite3_commit Funktion ausgesetzt. Ich sehe nur eine Funktion namens sqlite3_commit_hook(), die in der Dokumentation ein wenig diff unterscheidet. Gibt es eine Funktion für diesen Zweck ausgesetzt? oder Wie kann man dieses Verhalten erreichen?

Können Sie mir mit dem besten Ansatz dabei helfen?

Grüße, Arjun

+0

können Sie nicht einfach 'BEGIN' und' COMMIT' Abfragen ausführen? – falstro

Antwort

3

können Sie verwenden BEGIN, COMMIT und ROLLBACK SQL-Anweisungen innerhalb des C/C++ Code?

23

Sie verwenden sqlite3_exec und übergeben "BEGIN TRANSACTION" bzw. "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); 

Es sind Synonyme für diese SQL-Befehle (wie COMMIT anstelle von END TRANSACTION). Als Referenz ist hier die SQLite documentation for transactions.

Verwandte Themen