Antarmuka JDBC3.0 Savepoint baru menyediakan kontrol transaksi tambahan. Sebagian besar DBM modern mendukung SavePoints di lingkungannya seperti Oracle PL/SQL.
Tentukan titik rollback logis dalam transaksi saat mengatur titik penyimpanan. Jika kesalahan terjadi ketika savePoint sudah lewat, Anda dapat menggunakan metode rollback untuk membatalkan semua perubahan atau hanya perubahan yang dilakukan setelah savePoint.
Ada dua metode baru untuk objek koneksi untuk membantu mengelola savePoints:
setSavePoint (string savePointName): Menentukan savePoint baru. Ini juga mengembalikan objek savePoint.
ReleaseSavePoint (savePoint savePointName): Hapus savePoint. Perhatikan bahwa itu membutuhkan objek savePoint sebagai parameter. Objek ini biasanya dihasilkan oleh metode setSavePoint ().
Ada metode rollback (string savePointName) yang bergulir kembali ke savePoint yang ditentukan.
Contoh berikut menunjukkan cara menggunakan objek SavePoint:
coba {// asumsikan objek koneksi yang valid Conn.setAutocommit (false); Pernyataan stmt = conn.createStatement (); // atur savePoint savePoint savePoint1 = conn.setsAvePoint ("savePoint1"); String sql = "masukkan ke karyawan" + "nilai (106, 20, 'rita', 'tez')"; stmt.executeUpdate (SQL); // Kirimkan pernyataan SQL yang salah yang merusak string sql = "dimasukkan dalam nilai" + "nilai (107, 22, 'Sita', 'tez')"; stmt.executeUpdate (SQL); // Jika tidak ada kesalahan, lakukan perubahan. Conn.Commit ();} catch (sqlexception se) {// Jika ada kesalahan. Conn.rollback (savePoint1);} Dalam hal ini, tidak ada pernyataan insert di atas akan berhasil dan semuanya akan digulung kembali.
Di bawah ini adalah contoh menggunakan tutorial setSavePoint dan transaksi untuk menggambarkan rollback.
Kode sampel ini berdasarkan pada lingkungan dan instalasi basis data di bab sebelumnya telah dijelaskan.
Salin contoh berikut jdbcexample.java, kompilasi dan jalankan sebagai berikut:
// Langkah 1. Impor Paket yang Diperlukan IMPORT JAVA.SQL.*; Kelas Publik JdbCexample {// Nama Driver JDBC dan Database URL Static Final String JDBC_DRIVER = "com.mysql.jdbc.driver"; string final statis db_url = "jdbc: mysql: // localhost/emp"; // kredensial basis data static final string user = "username"; Static Final String Pass = "Kata Sandi"; public static void main (string [] args) {connection conn = null; Pernyataan stmt = null; Coba {// Langkah 2: Daftarkan JDBC Driver Class.forname ("com.mysql.jdbc.driver"); // Langkah 3: Buka koneksi System.out.println ("Menghubungkan ke Database ..."); conn = driverManager.getConnection (db_url, user, pass); // Langkah 4: Atur komit otomatis sebagai false. Conn.setAutocommit (false); // Langkah 5: Jalankan kueri untuk menghapus statmen dengan // argumen yang diperlukan untuk contoh RS. System.out.println ("Membuat Pernyataan ..."); stmt = conn.createStatement (); // Langkah 6: Sekarang daftar semua catatan yang tersedia. String sql = "Pilih id, pertama, terakhir, usia dari karyawan"; Hasil rs = stmt.executeQuery (sql); System.out.println ("Daftar hasil yang ditetapkan untuk referensi ...."); Printtrs (RS); // Langkah 7: Hapus baris yang memiliki Grater ID dari 104 // tetapi simpan poin sebelum melakukannya. SavePoint savePoint1 = conn.setsAvePoint ("rows_deleted_1"); System.out.println ("Menghapus baris ..."); String sql = "hapus dari karyawan" + "di mana id = 110"; stmt.executeUpdate (SQL); // Ups ... kami menghapus karyawan yang terlalu salah! // Langkah 8: Rollback Perubahan AFETR Simpan Point 2. Conn.rollback (SavePoint1); // Langkah 9: Hapus baris yang memiliki GRATER ID dari 104 // tetapi simpan poin sebelum melakukannya. SavePoint savePoint2 = conn.setsAvePoint ("rows_deleted_2"); System.out.println ("Menghapus baris ..."); Sql = "hapus dari karyawan" + "di mana id = 95"; stmt.executeUpdate (SQL); // Langkah 10: Sekarang daftar semua catatan yang tersedia. SQL = "Pilih ID, Pertama, Terakhir, Usia dari Karyawan"; rs = stmt.executeQuery (sql); System.out.println ("Daftar hasil yang ditetapkan untuk referensi ..."); Printtrs (RS); // Langkah 10: Lingkungan Pembersihan Rs.Close (); stmt.close (); conn.close (); } catch (sqlexception se) {// menangani kesalahan untuk jdbc se.printstacktrace (); // Jika ada kesalahan maka rollback perubahan. System.out.println ("Rolling Back Data di sini ..."); coba {if (conn! = null) conn.rollback (); } catch (sqlexception se2) {se2.printstacktrace (); } // end try} catch (exception e) {// menangani kesalahan untuk class.forname e.printstacktrace (); } akhirnya {// akhirnya blok yang digunakan untuk menutup sumber daya coba {if (stmt! = null) stmt.close (); } catch (sqlexception se2) {} // tidak ada yang bisa kita coba {if (conn! = null) conn.close (); } catch (sqlexception se) {se.printstacktrace (); } // Akhir akhirnya coba} // end try system.out.println ("Goodbye!");} // end Main public static void printrs (hasil RS) melempar sqlexception {// Pastikan kita mulai dengan baris pertama rs.beforefirst (); while (rs.next ()) {// ambil dengan nama kolom int id = rs.getint ("id"); int usia = rs.getint ("usia"); String first = rs.getString ("first"); String last = rs.getString ("last"); // tampilan nilai system.out.print ("id:" + id); System.out.print (", usia:" + usia); System.out.print (", pertama:" + pertama); System.out.println (", terakhir:" + terakhir); } System.out.println (); } // end printtrs ()} // end jdbcexampleSekarang mari kita menyusun contoh di atas sebagai berikut:
C:> javac jdbcexample.java
Saat menjalankan JDBCexample, itu menghasilkan hasil berikut:
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, Last: ChugDeleting row...Deleting row....List result set for reference....ID: 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, Last: Chuggoodbye!