Ich habe eine einfache jdbc connection. Über diese möchte ich gerne in mehrere Tabellen (A, B) schreiben. Also habe ich ungefähr folgenden Code:
Nehmen wir an, das einfügen der Daten in Tabelle B schlägt fehl (Ein Feld ist null, das es laut Tabelle nicht sein darf). Nun würde ich gerne den gesamten Einfüge-Vorgang rückgängig machen, da es mir nichts bringt, Daten nur in Tabelle A gespeichert zu haben, in B aber nicht. Darum das rollback() im catch-Block.
Nur leider verhält es sich nicht so. Obwohl ich die Transaktion abbreche, befinden sich Daten in Tabelle A. Füge in eine MySql-Datenbank ein, falls das von Interesse ist.
Jemand eine Idee, was hier falsch läuft!?
Java:
Connection conn = ...//Connection erzeugen
conn.setAutoCommit(false) // Transaktion "beginnen"
try{
Statement stmt = connection.createStatement();
stmt.executeUpdate(<Insert Data in Table A>); //fehlerfrei
stmt.executeUpdate(<Insert Data in Table B>); //FEHLERHAFT!
conn.commit(); //Einfügen bestätigen
}
catch(Exception e){
conn.rollback(); // Fehler -> Alles zurück
throw e;
}
finally{
conn.close(); // Verbindung schließen
}
Nur leider verhält es sich nicht so. Obwohl ich die Transaktion abbreche, befinden sich Daten in Tabelle A. Füge in eine MySql-Datenbank ein, falls das von Interesse ist.
Jemand eine Idee, was hier falsch läuft!?