JDBC: rollback() bei Exception geht nicht!?

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:

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
}```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!?

Welche MySql Engine benutzt du denn, MyIsam oder InnoDB?

MyIsam

http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-transactions.html

MyIsam unterstützt keine Transaktionen.

Lol* Na toll. Okay, vielen Dank. Habe schon an der JDBC-Schnittstelle gezweifelt (bzw. meiner Nutzung). Dann hat sich das geklärt.

Falls du an den Punkt kommen solltest: Referentielle Integrität ist auch nicht :wink:

[QUOTE=inv_zim;83371]Falls du an den Punkt kommen solltest: Referentielle Integrität ist auch nicht ;)[/QUOTE]Das wusste ich. Hat mich bisher auch nicht gestört, da ich auf Programm-Ebene eh nochmal teste und mich dabei dann ungern auf die DB verlasse. Zumindest weiß ich jetzt wodran es liegt und wenn das irgendwann mal Thema wird, stellen wir die ENGINE um. Aber für jetzt reicht mir erstmal die Info, warum es nicht geht. :slight_smile:

Danke nochmal für die wirklich schnelle Antwort.