JDBC - Transaktionen
Befindet sich Ihre JDBC-Verbindung standardmäßig im Auto-Commit- Modus, wird jede SQL-Anweisung nach Abschluss in die Datenbank übernommen.
Das mag für einfache Anwendungen in Ordnung sein, aber es gibt drei Gründe, warum Sie das automatische Festschreiben deaktivieren und Ihre eigenen Transaktionen verwalten möchten:
Um die Leistung zu steigern.
Aufrechterhaltung der Integrität von Geschäftsprozessen.
Verteilte Transaktionen verwenden.
Mit Transaktionen können Sie steuern, ob und wann Änderungen auf die Datenbank angewendet werden. Eine einzelne SQL-Anweisung oder eine Gruppe von SQL-Anweisungen wird als eine logische Einheit behandelt. Wenn eine Anweisung fehlschlägt, schlägt die gesamte Transaktion fehl.
Verwenden Sie die Verbindungsobjekte, um die Unterstützung für manuelle Transaktionen anstelle des vom JDBC-Treiber standardmäßig verwendeten Auto-Commit- Modus zu aktivierensetAutoCommit()Methode. Wenn Sie setAutoCommit () einen booleschen Wert false übergeben, deaktivieren Sie die automatische Festschreibung. Sie können einen Booleschen Wert true übergeben, um ihn wieder einzuschalten.
Wenn Sie beispielsweise ein Verbindungsobjekt mit dem Namen conn haben, codieren Sie Folgendes, um die automatische Festschreibung zu deaktivieren:
conn.setAutoCommit(false);
Commit & Rollback
Sobald Sie mit Ihren Änderungen fertig sind und die Änderungen festschreiben möchten, rufen Sie an commit() Methode für Verbindungsobjekt wie folgt -
conn.commit( );
Verwenden Sie andernfalls den folgenden Code, um Aktualisierungen der Datenbank zurückzusetzen, die mit der Verbindung conn erstellt wurden:
conn.rollback( );
Das folgende Beispiel zeigt die Verwendung eines Commit- und Rollback-Objekts.
try{
//Assume a valid connection object conn
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
String SQL = "INSERT INTO Employees " +
"VALUES (106, 20, 'Rita', 'Tez')";
stmt.executeUpdate(SQL);
//Submit a malformed SQL statement that breaks
String SQL = "INSERTED IN Employees " +
"VALUES (107, 22, 'Sita', 'Singh')";
stmt.executeUpdate(SQL);
// If there is no error.
conn.commit();
}catch(SQLException se){
// If there is any error.
conn.rollback();
}
In diesem Fall würde keine der oben genannten INSERT-Anweisungen erfolgreich sein und alles würde zurückgesetzt.
Lassen Sie uns zum besseren Verständnis den Commit - Beispielcode studieren .
Verwenden von Sicherungspunkten
Die neue JDBC 3.0 Savepoint-Schnittstelle bietet Ihnen die zusätzliche Transaktionssteuerung. Die meisten modernen DBMS unterstützen Sicherungspunkte in ihren Umgebungen, z. B. PL / SQL von Oracle.
Wenn Sie einen Sicherungspunkt festlegen, definieren Sie einen logischen Rollback-Punkt innerhalb einer Transaktion. Wenn nach einem Sicherungspunkt ein Fehler auftritt, können Sie mit der Rollback-Methode entweder alle Änderungen oder nur die nach dem Sicherungspunkt vorgenommenen Änderungen rückgängig machen.
Das Verbindungsobjekt verfügt über zwei neue Methoden, mit denen Sie Sicherungspunkte verwalten können:
setSavepoint(String savepointName):Definiert einen neuen Sicherungspunkt. Es wird auch ein Savepoint-Objekt zurückgegeben.
releaseSavepoint(Savepoint savepointName):Löscht einen Sicherungspunkt. Beachten Sie, dass ein Savepoint-Objekt als Parameter erforderlich ist. Dieses Objekt ist normalerweise ein Sicherungspunkt, der von der Methode setSavepoint () generiert wird.
Es gibt eine rollback (String savepointName) Methode, mit der die Arbeit auf den angegebenen Sicherungspunkt zurückgesetzt wird.
Das folgende Beispiel zeigt die Verwendung eines Savepoint-Objekts.
try{
//Assume a valid connection object conn
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
//set a Savepoint
Savepoint savepoint1 = conn.setSavepoint("Savepoint1");
String SQL = "INSERT INTO Employees " +
"VALUES (106, 20, 'Rita', 'Tez')";
stmt.executeUpdate(SQL);
//Submit a malformed SQL statement that breaks
String SQL = "INSERTED IN Employees " +
"VALUES (107, 22, 'Sita', 'Tez')";
stmt.executeUpdate(SQL);
// If there is no error, commit the changes.
conn.commit();
}catch(SQLException se){
// If there is any error.
conn.rollback(savepoint1);
}
In diesem Fall würde keine der oben genannten INSERT-Anweisungen erfolgreich sein und alles würde zurückgesetzt.
Lassen Sie uns zum besseren Verständnis den Savepoints - Beispielcode studieren .