18.11.2 | Steuerung von Transaktionen mit JDBC |
Liefert getAutoCommit() den Wert false, muss man die Steuerung der Transaktionen explizit im Quellcode durchführen. Hierfür stellt das Interface Connection folgende Methoden zur Verfügung:Folgender Codeausschnitt zeigt ein Beispiel für die Verwendung von commit() und rollback():
- commit()
Beendet die aktuelle Transaktion und schreibt die durchgeführten Änderungen in der Datenbank fest. Es wird also explizit ein COMMIT in der Datenbank ausgeführt. Nach dem Aufruf von commit() wird außerdem automatisch eine neue Transaktion begonnen.- rollback()
Wird für die Durchführung eines ROLLBACK in der Datenbank benutzt. Es werden somit alle Änderungen verworfen, die seit dem letzten Aufruf von commit() gemacht wurden.Connection con = DriverManager.getConnection(url, user, password); // Auto-Commit deaktivieren con.setAutoCommit(false); Statement stmt = con.createStatement(); ... try { stmt.executeUpdate(sql1); stmt.executeUpdate(sql2); stmt.executeUpdate(sql3); // Wenn keine Fehler aufgetreten sind, // Änderungen festschreiben con.commit(); } catch(SQLException e) { // Beim Auftreten einer Exception Rollback durchführen con.rollback(); } ...Nach dem Deaktivieren des Auto-Commit werden mehrere SQL-Operationen in einer try/catch-Klausel durchgeführt. Tritt kein Fehler auf, wird nach der letzten Anweisung commit() aufgerufen. Beim Auslösen einer SQLException wird commit() übersprungen und in den catch-Block verzweigt. Dort wird durch Aufruf von rollback() ein ROLLBACK durchgeführt.