English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JDBC-Transaktionen

Wenn die JDBC-Verbindung im automatischen Commit-Modus ist (im Standardfall ist es der automatische Commit-Modus), wird jedes SQL-Statement nach der Ausführung an die Datenbank übergeben. Dies kann für einfache Anwendungen gut sein, aber aus folgenden drei Gründen möchten Sie möglicherweise den automatischen Commit deaktivieren und Ihre eigenen Transaktionen verwalten.-

  • Um die Leistung zu verbessern.

  • Um die Integrität des Geschäftsprozesses zu erhalten.

  • Verwenden Sie verteilte Transaktionen.

Transaktionen ermöglichen es Ihnen, zu steuern, ob und wann Änderungen auf die Datenbank angewendet werden. Sie betrachten eine einzelne SQL-Anweisung oder eine Gruppe von SQL-Anweisungen als einen logischen Einheit, wenn eine Anweisung fehlschlägt, dann wird die gesamte Transaktion fehlschlagen.

Um manuelle Transaktionsunterstützung zu aktivieren, anstatt die vom JDBC-Treiber standardmäßig verwendeteAutomatische ÜbertragungMuster, verwenden Sie dassetAutoCommit()Methode. Wenn Sie den Boolean-Wert false an setAutoCommit() übergeben, wird die automatische Übertragungsfunktion deaktiviert. Sie können den Boolean-Wert true übergeben, um sie erneut zu öffnen.

Zum Beispiel, wenn Sie ein Connection-Objekt namens conn haben, schreiben Sie folgenden Code, um die automatische Übertragung abzuschalten-

conn.setAutoCommit(false);

Commit und Rollback

Führen Sie die Änderungen durch und möchten Sie die Änderungen bestätigen, bitteRufen Sie den Methodenaufruf auf dem Verbindungsobjekt aufcommit(), wie folgt:

conn.commit( );

Sonst, um die Datenbankaktualisierungen, die durch das Connection conn vorgenommen wurden, zurückzusetzen, verwenden Sie folgenden Code-

conn.rollback( );

Der folgende Beispiel zeigt die Verwendung von commit und rollback-Objekten-

try{
   //Angenommen, ein gültiges Verbindungsinstant
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   String SQL = "INSERT INTO Employees" +
                "Werte (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //Ein SQL-Befehl mit falschem Format einreichen, der den Prozess unterbricht
   String SQL = "INSERTED IN Employees" +
                "Werte (107, 22, 'Sita', 'Singh')";
   stmt.executeUpdate(SQL);
   // wenn keine Fehler vorliegen.
   conn.commit();
}
   // wenn es irgendwelche Fehler gibt.
   conn.rollback();
}

In diesem Fall wird der obige INSERT-Befehl nicht erfolgreich sein und alles wird zurückgerollt.

Um ein besseres Verständnis zu bekommen, lassen Sie uns "commit-Beispielcode.

Verwenden Sie Savepoint

neue JDBC 3.0 Das Savepoint-Interface bietet Ihnen weitere Transaktionskontrollen. Die meisten modernen DBMS unterstützen in ihrem Umfeld Speicherpunkte, z.B. Oracle PL / SQL.

Wenn Sie einen Speicherpunkt setzen, können Sie in einer Transaktion logische Rückschrittspunkte definieren. Wenn nach dem Speicherpunkt ein Fehler auftritt, können Sie alle Änderungen mit dem Rollback-Verfahren rückgängig machen oder nur die Änderungen, die nach dem Speicherpunkt vorgenommen wurden.

Das Connection-Objekt verfügt über zwei neue Methoden, die Ihnen helfen, Speicherpunkte zu verwalten-

  • setSavepoint(String savepointName):Definieren Sie einen neuen Speicherpunkt. Es wird auch ein Savepoint-Objekt zurückgegeben.

  • releaseSavepoint(Savepoint savepointName):Löschen Sie den Speicherpunkt. Beachten Sie, dass er ein Savepoint-Objekt als Parameter benötigt. Dieses Objekt wird in der Regel durch das setSavepoint()-Verfahren generiert.

rollback (String savepointName)Diese Methode kann den Arbeitsprozess auf einen bestimmten Speicherpunkt zurückrollen.

Das folgende Beispiel zeigt die Verwendung des Savepoint-Objekts.-

try{
   //Angenommen, ein gültiges Verbindungsinstant
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();
   
   //Ein Speicherpunkt setzen
   Savepoint savepoint1 = conn.setSavepoint("Savepoint1);
   String SQL = "INSERT INTO Employees" +
                "Werte (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //Ein SQL-Befehl mit falschem Format einreichen, der den Prozess unterbricht
   String SQL = "INSERTED IN Employees" +
                "Werte (107, 22, 'Sita', 'Tez')";
   stmt.executeUpdate(SQL);
   // Wenn es keine Fehler gibt, bitte die Änderungen bestätigen.
   conn.commit();
}
   // wenn es irgendwelche Fehler gibt.
   conn.rollback(savepoint1);
}

In diesem Fall wird der obige INSERT-Befehl nicht erfolgreich sein und alles wird zurückgerollt.

Um ein besseres Verständnis zu bekommen, lassen Sie unsSavepoints-Beispielcode.