Friday, July 31, 2009

Penanganan Transaksi pada JDBC

Sebelum menjelaskan penerapan transaksi pada JDBC (Java Database Connectivity), maka akan diuraikan terlebih dahulu tentang konsep transaksi.

Transaksi merupakan sekumpulan perintah SQL yang diperlakukan sebagai satu unit atau satu kesatuan dan diberikan satu penanganan error. JDBC menyediakan fasilitas auto-commit pada setiap statement maupun setelah sekelompok statement sukses atau gagal dijalankan kemudian memanggil methode commit atau rollback.

Penggunaan transaksi ini dimaksudkan untuk menjaga integritas data agar tetap valid.

Syarat transaksi adalah:
  1. Atomik
  2. Transaksi, meskipun terdiri dari beberapa perintah SQL tetapi diperlakukan sebagai satu kesatuan eksekusi. Semua jalan atau tidak sama sekali!.
  3. Konsisten
  4. Bila suatu transaksi selesai dijalankan database tatap dalam kondisi valid.
  5. Isolasi
  6. Saat dilakukan eksekusi, transaksi tersebut diisolasi pada tingkat isolasi tertentu yang sesuai dengan transaksi lain.
  7. Durabilitas
  8. Bila transaksi selesai, perubahan yang terjadi adalah permanen.

Transaksi biasanya diterapkan saat insert maupun delete record. Misalnya saat proses mahasiswa mengundurkan diri, maka data di tabel KRS, Registrasi dan Beasiswa harus dihapus, sedangkan di tabel Mahasiswa dilakukan update status.

Contoh penggunaan:

    Connection con = null;
    try
    {
        Class.forName(driver).newInstance();
        con = DriverManager.getConnection(koneksi, user, password);
        con.setAutoCommit(false);
            
        /* REGISTRASI */
        PreparedStatement pst1 = con.prepareStatement("DELETE FROM REGISTRASI WHERE 

NIM = ?");
        pst1.setString(1, Nim);
        pst1.executeUpdate();
        System.out.println("Hapus dari tabel REGISTRASI.... Selesai...");
                      
        /* KRS */
        PreparedStatement pst2 = con.prepareStatement("DELETE FROM KRS WHERE NIM = 

?");
        pst2.setString(1, Nim);
        pst2.executeUpdate();
        System.out.println("Hapus dari tabel KRS.... Selesai...");
                
        /* MAHASISWA */
        PreparedStatement pst3 = con.prepareStatement("UPDATE MAHASISWA SET Status = 

? WHERE NIM = ?");
        pst3.setString(1, "M");
        pst3.setString(2, Nim);
        pst.executeUpdate();
        System.out.println("Update status dari tabel MAHASISWA.... Selesai...");
             
        con.commit();
        con.setAutoCommit(true);
                
        System.out.println("Proses sukses...");
    }
    catch(Exception e)
    {
        e.printStackTrace();
        try
 {
         con.rollback();
 }
 catch(Exception e1)
 {
            e1.printStackTrace();
 }
    }

Mudah bukan? Anda dapat melakukan variasi yang lain sesuai kebutuhan.