<< February 2013 | Home | April 2013 >>

[Java] Penanganan Transaksi pada JDBC

PreparedStatement, Java, JDBC, Database

Seringkali dalam pemrosesan data pada database, aplikasi melakukan beberapa proses update dan insert secara bersamaan dalam satu transaksi. Contoh sederhana misalnya, dalam transaksi pembayaran mahasiswa selain mengupdate status tagihan, memasukkan ke data pembayaran, maka perlu juga ditambahkan status registrasinya. Ketiga proses ini harus berhasil semuanya. Jika terdapat salah satu proses yang gagal, maka keseluruhan proses harus dibatalkan (rollback) agar data tetap konsisten.

Java memiliki beberapa mekanisme untuk menangani transaksi. Diantaranya dengan menggunakan PreparedStatement. Contoh berikut penggunaan PreparedStatement untuk penanganan transaksi:

private void simpan() {
    Connection con = null;
    String sql = "";
    try {
        /* buat koneksi */
        con = MyCon.connect();

        /* buat agar koneksi tidak otomatis commit */
        con.setAutoCommit(false);

        sql = "UPDATE e_payment SET sts_bayar=? WHERE nmr_tagihan=?";
        PreparedStatement pst = con.prepareStatement(sql);
        pst.setInt(1, 1);
        pst.setString(2, "1234567890");
        pst.executeUpdate();

        sql = "INSERT INTO PEMBAYARAN(nim, spp, tgl_bayar) VALUES(?, ?, ?)";
        pst = con.prepareStatement(sql);
        pst.setString(1, "1234567890");
        pst.setInt(2, 1500000);
        pst.setTimestamp(3, new Timestamp(new java.util.Date().getTime()));
        pst.executeUpdate();

        sql = "INSERT INTO REGISTRASI(nim, tgl_reg) VALUES(?, ?)";
        pst = con.prepareStatement(sql);
        pst.setString(1, "1234567890");
        pst.setTimestamp(2, new Timestamp(new java.util.Date().getTime()));
        pst.executeUpdate();

        /* panggil commit secara manual */
        con.commit();
        con.setAutoCommit(true);
    }
    catch (Exception e) {
        e.printStackTrace();
        try {
            /* kembalikan ke semula jika error */
            con.rollback();
        }
        catch (Exception ex) {
        }
    }
}

Ketiga proses tersebut harus berhasil dijalankan semuanya, atau jika ada kegagalan salah satunya, maka kesemua proses harus dibatalkan.

Categories : Java Programming

Export this post as PDF document  Export this post to PDF document

Related Posts
Implementasi Single Sign On dengan JOSSO
Project Euler - Problem 2
Project Euler - Problem 1
Menampilkan Favicon
String MD5 Hash dengan Java


Social Bookmarks :  Add this post to Slashdot    Add this post to Digg    Add this post to Reddit    Add this post to Delicious    Add this post to Stumble it    Add this post to Google    Add this post to Technorati    Add this post to Bloglines    Add this post to Facebook    Add this post to Furl    Add this post to Windows Live    Add this post to Yahoo!