Menggunakan titik simpan

Unduh driver JDBC

Savepoint menawarkan mekanisme untuk mengembalikan bagian transaksi. Dalam SQL Server, Anda dapat membuat titik penyimpanan dengan menggunakan pernyataan savepoint_name SAVE TRANSACTION. Kemudian, Anda menjalankan pernyataan ROLLBACK TRANSACTION savepoint_name untuk kembali ke titik penyimpanan alih-alih menggulung balik ke awal transaksi.

Titik simpan berguna dalam situasi di mana kesalahan tidak mungkin terjadi. Penggunaan titik simpan untuk mengembalikan bagian dari transaksi dalam kasus kesalahan yang jarang terjadi bisa lebih efisien daripada memiliki setiap pengujian transaksi untuk melihat apakah pembaruan valid sebelum melakukan pembaruan. Updates dan putar kembali adalah operasi yang mahal, sehingga titik hemat hanya efektif jika kemungkinan mengalami kesalahan rendah dan biaya memeriksa validitas pembaruan sebelumnya relatif tinggi.

Driver Microsoft JDBC untuk SQL Server mendukung penggunaan titik simpan melalui metode setSavepoint dari kelas SQLServerConnection. Dengan menggunakan metode setSavepoint, Anda dapat membuat titik simpan bernama atau tanpa nama dalam transaksi saat ini, dan metode akan mengembalikan objek SQLServerSavepoint . Beberapa titik penyimpanan dapat dibuat dalam transaksi. Untuk mengembalikan transaksi ke titik penyimpanan tertentu, Anda dapat meneruskan objek SQLServerSavepoint ke metode rollback (java.sql.Savepoint).

Dalam contoh berikut, titik simpan digunakan saat melakukan transaksi lokal yang terdiri dari dua pernyataan terpisah dalam try blok. Pernyataan dijalankan terhadap tabel Production.ScrapReason dalam database sampel AdventureWorks2019, dan titik penyimpanan digunakan untuk mengembalikan pernyataan kedua. Ini hanya menghasilkan pernyataan pertama yang diterapkan ke database.

public static void executeTransaction(Connection con) {
    try(Statement stmt = con.createStatement();) {
        con.setAutoCommit(false);
        stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Correct width')");
        Savepoint save = con.setSavepoint();
        stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Wrong width')");
        con.rollback(save);
        con.commit();
        System.out.println("Transaction succeeded.");
    }
    catch (SQLException ex) {
        ex.printStackTrace();
        try {
            System.out.println("Transaction failed.");
            con.rollback();
        }
        catch (SQLException se) {
            se.printStackTrace();
        }
    }
}

Lihat juga

Melakukan transaksi dengan driver JDBC