Jika koneksi JDBC dalam mode AutoCommit, itu secara default, maka setiap pernyataan SQL berkomitmen pada database ketika selesai.
Ini mungkin untuk aplikasi sederhana, tetapi karena tiga alasan Anda mungkin ingin mematikan komit otomatis dan mengelola transaksi Anda sendiri:
Untuk mengontrol transaksi dan ketika perubahan diterapkan ke database. Dibutuhkan pernyataan SQL tunggal atau satu set pernyataan SQL sebagai unit logis, dan jika ada pernyataan yang gagal, seluruh transaksi gagal.
Untuk mengaktifkan, alih-alih driver JDBC menggunakan dukungan transaksi manual mode-komit otomatis secara default, gunakan metode setautocommit () dari objek koneksi. Jika nilai boolean diteruskan ke setautocommit (), matikan komit otomatis. Nilai boolean dapat diteruskan ke true untuk membukanya kembali.
Misalnya, jika ada objek bernama Conn Connection, kode berikut akan mematikan komit otomatis:
Conn.setAutocommit (false);
Kirim dan rollback
Setelah perubahan selesai, Anda ingin melakukan perubahan dan kemudian memanggil metode komit (pada objek koneksi) sebagai berikut:
Conn.Commit ();
Kalau tidak, pembaruan rollback yang dibuat untuk database penggunaan bernama Connection Conn, menggunakan kode berikut:
Conn.rollback ();
Contoh berikut menunjukkan cara menggunakan objek komit dan rollback:
coba {// asumsikan objek koneksi yang valid Conn.setAutocommit (false); Pernyataan stmt = conn.createStatement (); String sql = "masukkan ke karyawan" + "nilai (106, 20, 'rita', 'tez')"; stmt.executeUpdate (SQL); // Kirimkan pernyataan SQL yang salah yang merusak string sql = "dimasukkan ke dalam karyawan" + "nilai (107, 22, 'Sita', 'singh')"; stmt.executeUpdate (SQL); // Jika tidak ada kesalahan. Conn.Commit ();} catch (sqlexception se) {// Jika ada kesalahan. conn.rollback ();}Dalam hal ini, tidak ada pernyataan insert di atas akan berhasil dan semuanya akan digulung kembali.
Contoh komit dan rollback transaksi
Berikut ini adalah contoh menggunakan komitmen transaksi dan deskripsi rollback.
Kode sampel ini telah dipelajari berdasarkan instalasi lingkungan dan database di bab sebelumnya.
Salin jdbcexample.java dari contoh berikut di masa lalu, kompilasi dan jalankan, seperti yang ditunjukkan di bawah ini:
// 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 membuat statmen dengan // argumen yang diperlukan untuk contoh RS. System.out.println ("Membuat Pernyataan ..."); stmt = conn.createStatement (resultet.type_scroll_insensitive, resultet.concur_updatable); // Langkah 6: Masukkan baris ke karyawan tabel System.out.println ("Memasukkan satu baris ...."); String sql = "masukkan ke karyawan" + "nilai (106, 20, 'rita', 'tez')"; stmt.executeUpdate (SQL); // Langkah 7: Masukkan satu baris lagi ke tabel karyawan sql = "masukkan ke dalam karyawan" + "nilai (107, 22, 'Sita', 'singh')"; stmt.executeUpdate (SQL); // Langkah 8: Komit data di sini. System.out.println ("Memerintah data di sini ...."); Conn.Commit (); // Langkah 9: 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 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...Inserting one row....Committing data here....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: 28, First: Sumit, Last: MittalID: 106, Age: 20, First: Rita, Last: Tezid: 107, Umur: 22, Pertama: Sita, Terakhir: Singhgoodbye!