Die neue JDBC3.0 SavePoint -Schnittstelle bietet zusätzliche Transaktionsregelung. Die meisten modernen DBMs unterstützen SavePoints in ihren Umgebungen wie Oracle PL/SQL.
Definieren Sie einen logischen Rollback -Punkt in der Transaktion, wenn Sie einen Speicherpunkt festlegen. Wenn ein Fehler auftritt, wenn ein SavePoint vergangen ist, können Sie die Rollback -Methode entweder alle Änderungen oder nur Änderungen, die nach dem SavePoint vorgenommen wurden, rückgängig machen.
Es gibt zwei neue Methoden für Verbindungsobjekte, um SavePoints zu verwalten:
SETSAVEPOPPE (SREISE SAVEPOINTNAME): Definiert einen neuen SavePoint. Es gibt auch ein SavePoint -Objekt zurück.
releaseSavoint (savePoint SavePointName): Löschen Sie einen Speicherpunkt. Beachten Sie, dass ein SavePoint -Objekt als Parameter erforderlich ist. Dieses Objekt wird normalerweise von der Methode setSavoint () generiert.
Es gibt eine Rollback (String SavePointName) -Methode, die zum angegebenen SavePoint zurückrollt.
Das folgende Beispiel zeigt, wie ein SavePoint -Objekt verwendet wird:
Versuchen Sie {// Nehmen Sie ein gültiges Verbindungsobjekt Conn.SetAutoCommit (False) an; Anweisung STMT = Conn.CreateStatement (); // SavePoint SavePoint SavePoint1 = Conn.SetsavePoint ("SavePoint1") festlegen; 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', 'tez')"; stmt.executeUpdate (SQL); // Wenn es keinen Fehler gibt, begehen Sie die Änderungen. conn.commit ();} catch (SQLEXception SE) {// Wenn es einen Fehler gibt. Conn.Rollback (SavePoint1);} In diesem Fall wird keine Einfügungsanweisung erfolgreich sein und alles wird zurückgerollt.
Im Folgenden finden Sie ein Beispiel für die Verwendung von Setsavoint- und Transaktions -Tutorial, um Rollback zu beschreiben.
Dieser Beispielcode basierend auf der Umgebung und Datenbankinstallation im vorherigen Kapitel wurde erläutert.
Kopieren Sie das folgende Beispiel jdbcexample.java, kompilieren und rennen Sie wie folgt aus:
// 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 die Aussagen mit // erforderlichen Argumenten für RS -Beispiel zu löschen. System.out.println ("Erstellen von Anweisung ..."); STMT = Conn.CreateStatement (); // Schritt 6: 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 eingestellt ...."); Printrs (Rs); // Schritt 7: Zeilen mit ID -Reiben löschen als 104 //, aber davor speichern Sie den Punkt. SavePoint SavePoint1 = Conn.SetsavePoint ("rows_deleted_1"); System.out.println ("Zeile löschen ..."); String sql = "Aus Mitarbeitern löschen" + "wobei id = 110"; stmt.executeUpdate (SQL); // oops ... wir haben zu falsche Mitarbeiter gelöscht! // Schritt 8: Rollback Die Änderungen AFT -Speicherpunkt 2. Conn.Rollback (SavePoint1); // Schritt 9: Zeilen mit ID -Reiben als 104 löschen //, aber speichern Sie den Punkt, bevor Sie dies tun. SavePoint SavePoint2 = Conn.SetsavePoint ("rows_deleted_2"); System.out.println ("Zeile löschen ..."); SQL = "Aus Mitarbeitern löschen" + "wobei id = 95"; stmt.executeUpdate (SQL); // Schritt 10: Listen Sie jetzt alle verfügbaren Datensätze auf. SQL = "ID, zuerst, zuletzt, Alter von Mitarbeitern auswählen"; 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
Connecting to database...Creating statement...List result set for reference....ID: 95, Age: 20, First: Sima, Last: ChugID: 100, Age: 18, First: Zara, Last: AliID: 101, Age: 25, First: Mahnaz, Last: FatmaID: 102, Age: 30, First: Zaid, Last: KhanID: 103, Age: 30, First: Sumit, Last: MittalID: 110, Age: 20, First: Sima, letztes: ChugDeleting Row ... Löschen der Reihe .... Listenergebnis als Referenz Set .... ID: 100, Alter: 18, zuerst: Zara, zuletzt: Aliid: 101, Alter: 25, Erstens: Mahnaz, zuletzt: Fatmaid: 102, Alter: 30, zuerst: Zaid, zuletzt, Khanid: 103, Alter: Erst: Sumit: Last: Last: Ehre: Ehre: 110, 110, Alter: 30, 20, 30, zuletzt: letztes: letzt