Wenn sich die JDBC -Verbindung im automatischen Modus befindet, ist sie standardmäßig, dann wird jede SQL -Anweisung in der Datenbank festgelegt, wenn sie abgeschlossen ist.
Dies kann für einfache Anwendungen geeignet sein, aber aus drei Gründen möchten Sie möglicherweise automatisch eingehen und Ihre eigenen Transaktionen verwalten:
Transaktionen zu kontrollieren und wenn Änderungen auf die Datenbank angewendet werden. Es dauert eine einzelne SQL -Anweisung oder eine Reihe von SQL -Anweisungen als logische Einheit, und wenn eine Anweisung fehlschlägt, schlägt die gesamte Transaktion fehl.
Zum Aktivieren verwenden Sie anstelle von JDBC-Treibern standardmäßig die Handbuchtransaktionsunterstützung für automatisch-Commit-Modus die Methode setAutoCommit () des Verbindungsobjekts. Wenn ein Boolescher Wert an setAutocommit () übergeben wird, deaktivieren Sie das automatische Commit. Ein boolescher Wert kann an True übergeben werden, um ihn wieder zu eröffnen.
Wenn beispielsweise ein Objekt namens Conn Connection vorhanden ist, deaktiviert der folgende Code das automatische Commit:
conn.setAutocommit (false);
Senden und Rollback
Sobald die Änderungen abgeschlossen sind, möchten Sie die Änderungen festlegen und dann wie folgt die Methode des Komits (auf der Verbindungsobjekt) aufrufen:
conn.commit ();
Andernfalls verwenden die Rollback -Updates, die in der Datenbank vorgenommen wurden, mit dem folgenden Code mit dem Namen Connection Conn:
conn.rollback ();
Das folgende Beispiel zeigt, wie ein Commit- und Rollback -Objekt verwendet wird:
Versuchen Sie {// Nehmen Sie ein gültiges Verbindungsobjekt Conn.SetAutoCommit (False) an; Anweisung STMT = Conn.CreateStatement (); String SQL = "In Mitarbeiter einfügen" + "Werte (106, 20, 'Rita', 'tez')"; stmt.executeUpdate (SQL); // Senden Sie eine missgebildete SQL -Anweisung, die String sql = "In Mitarbeitern eingefügt" + "-Werte (107, 22, 'Sita', 'Singh')"); stmt.executeUpdate (SQL); // Wenn es keinen Fehler gibt. conn.commit ();} catch (SQLEXception SE) {// Wenn es einen Fehler gibt. conn.rollback ();}In diesem Fall wird keine Einfügungsanweisung erfolgreich sein und alles wird zurückgerollt.
Transaktionsausschüsse und Rollback -Beispiele
Das Folgende ist ein Beispiel für die Verwendung von Transaktionsausschüssen und Rollback -Beschreibung.
Dieser Beispielcode wurde basierend auf der Umgebung und Datenbankinstallation im vorherigen Kapitel gelernt.
Kopieren Sie die jdbcexample.java aus dem folgenden Beispiel in der Vergangenheit, kompilieren und rennen, wie unten gezeigt:
// Schritt 1. Importieren der erforderlichen Paketesimport Java.sql. statische endgültige Zeichenfolge db_url = "jdbc: mysql: // localhost/emp"; // Datenbankanmeldeinformationen static Final String user = "Benutzername"; statische endgültige String -Pass = "Passwort"; public static void main (String [] args) {Verbindung conn = null; Aussage STMT = NULL; try {// Schritt 2: Registrieren Sie die JDBC -Treiberklasse.Forname ("com.mysql.jdbc.driver"); // Schritt 3: Öffnen Sie ein Verbindungssystem.out.println ("Verbindung zu Datenbank herstellen ..."); conn = driverManager.getConnection (db_url, Benutzer, Pass); // Schritt 4: Setzen Sie das Auto Commit als falsch. conn.setAutocommit (false); // Schritt 5: Führen Sie eine Abfrage aus, um eine Aussage mit // erforderlichen Argumenten für RS -Beispiel zu erstellen. System.out.println ("Erstellen von Anweisung ..."); STMT = Conn.CreateStatement (resultset.type_scroll_insensitive, resultset.concur_updatable); // Schritt 6: Fügen Sie eine Zeile in Mitarbeiter table system.out.println ein ("eine Zeile einfügen ...."); String SQL = "In Mitarbeiter einfügen" + "Werte (106, 20, 'Rita', 'tez')"; stmt.executeUpdate (SQL); // Schritt 7: Fügen Sie eine weitere Zeile in die Mitarbeiter Tabelle SQL = "In Mitarbeiter einfügen" + "Werte (107, 22," Sita "," Singh ")"; stmt.executeUpdate (SQL); // Schritt 8: Daten hier angeben. System.out.println ("Daten hier hier ...."); conn.commit (); // Schritt 9: Listen Sie jetzt alle verfügbaren Datensätze auf. String SQL = "ID, zuerst, zuletzt, Alter von Mitarbeitern" auswählen "; ResultSet rs = stmt.executeQuery (SQL); System.out.println ("Listenergebnis als Referenz gesetzt ..."); Printrs (Rs); // Schritt 10: Reinigungsumgebung rs.close (); stmt.close (); conn.close (); } catch (sqlexception se) {// Fehler für JDBC SE.printstacktrace () verwandeln; // Wenn ein Fehler vorliegt, rollen Sie die Änderungen zurück. System.out.println ("hier zurückrollen ..."); try {if (conn! = null) conn.rollback (); } catch (sqlexception se2) {se2.printstacktrace (); } // Ende try} catch (Ausnahme E) {// Fehler für class.forname e.printstacktrace (); } endlich {// Block Block Block, um Ressourcen zu schließen, versuche {if (stmt! = null) stmt.close (); } catch (sqlexception se2) {} // nichts, was wir versuchen können {if (conn! = null) conn.close (); } catch (sqlexception se) {se.printstacktrace (); } // End endlich try} // Ende try system.out.println ("Goodbye!");} // Ende der Hauptpublikum statische void Printrs (Ergebnisset Rs) löst SQLEXception aus {// Stellen Sie sicher, dass wir mit der ersten Zeile Rs.Beforefirst () beginnen; while (rs.Next ()) {// nach Spaltenname int id = rs.getInt ("id"); int age = rs.getInt ("Alter"); String first = rs.getString ("First"); String last = rs.getString ("last"); // Werte system.out.print ("id:" + id); System.out.print (", Alter:" + Alter); System.out.print (", zuerst:" + zuerst); System.out.println (", last:" + last); } System.out.println (); } // End printrs ()} // End JDBCExampleKompilieren wir nun das obige Beispiel wie folgt:
C:> Javac jdbcexample.java
Beim Ausführen von JDBCExample wird die folgenden Ergebnisse erzielt:
C:> Java Jdbcexample
Verbindung zu Datenbank ... Erstellen von Anweisung ... Einfügen einer Zeile .... Daten hier einsetzen .... Listenergebnis als Referenz eingestellt .... ID: 100, Alter: 18, zuerst: Zara, zuletzt: Aliid: 101, Alter: 25, Erste: Mahnaz, zuletzt: Fatmaid: 102, Alter: 30, zuerst: Zaid, zuletzt: Khanid: 103, Alter: 28: Sumit: Sumit: Tezid: 107, Alter: 22, zuerst: Sita, zuletzt: Singhgoodbye!