Memahami transaksi
Transaksi adalah kelompok operasi yang digabungkan ke dalam unit kerja logis. Mereka digunakan untuk mengontrol dan mempertahankan konsistensi dan integritas setiap tindakan dalam transaksi, meskipun ada kesalahan yang mungkin terjadi dalam sistem.
Dengan Microsoft JDBC Driver untuk SQL Server, transaksi dapat lokal atau terdistribusi. Transaksi juga dapat menggunakan tingkat isolasi. Untuk informasi selengkapnya tentang tingkat isolasi yang didukung oleh driver JDBC, lihat Memahami Tingkat Isolasi.
Aplikasi harus mengontrol transaksi dengan menggunakan pernyataan Transact-SQL atau metode yang disediakan oleh driver JDBC, tetapi tidak keduanya. Menggunakan pernyataan Transact-SQL dan metode JDBC API pada transaksi yang sama dapat menyebabkan masalah, seperti transaksi tidak dapat dilakukan ketika diharapkan, transaksi dilakukan atau digulung balik dan yang baru dimulai secara tak terduga, atau pengecualian "Gagal melanjutkan transaksi".
Menggunakan transaksi lokal
Transaksi dianggap lokal ketika merupakan transaksi fase tunggal, dan ditangani oleh database secara langsung. Driver JDBC mendukung transaksi lokal dengan menggunakan berbagai metode kelas SQLServerConnection , termasuk setAutoCommit, commit, dan rollback. Transaksi lokal biasanya dikelola secara eksplisit oleh aplikasi atau secara otomatis oleh server aplikasi Java Platform, Enterprise Edition (Java EE).
Contoh berikut melakukan transaksi lokal yang terdiri dari dua pernyataan terpisah dalam try
blok. Pernyataan dijalankan terhadap tabel Production.ScrapReason dalam database sampel AdventureWorks2022, dan mereka diterapkan jika tidak ada pengecualian yang dilemparkan. Kode di blok catch
mengembalikan transaksi jika pengecualian dilemparkan.
public static void executeTransaction(Connection con) {
try {
//Switch to manual transaction mode by setting
//autocommit to false. Note that this starts the first
//manual transaction.
con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Wrong size')");
stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Wrong color')");
con.commit(); //This commits the transaction and starts a new one.
stmt.close(); //This turns off the transaction.
System.out.println("Transaction succeeded. Both records were written to the database.");
}
catch (SQLException ex) {
ex.printStackTrace();
try {
System.out.println("Transaction failed.");
con.rollback();
}
catch (SQLException se) {
se.printStackTrace();
}
}
}
Menggunakan transaksi terdistribusi
Transaksi terdistribusi memperbarui data pada dua database jaringan atau lebih sambil mempertahankan properti pemrosesan transaksi yang penting, konsisten, terisolasi, dan tahan lama (ACID). Dukungan transaksi terdistribusi ditambahkan ke JDBC API dalam spesifikasi API Opsional JDBC 2.0. Manajemen transaksi terdistribusi biasanya dilakukan secara otomatis oleh manajer transaksi Java Transaction Service (JTS) di lingkungan server aplikasi Java EE. Namun, Driver Microsoft JDBC untuk SQL Server mendukung transaksi terdistribusi di bawah manajer transaksi yang mematuhi Java Transaction API (JTA).
Driver JDBC terintegrasi dengan Mulus dengan Koordinator Transaksi Terdistribusi Microsoft (MS DTC) untuk memberikan dukungan transaksi terdistribusi yang sebenarnya dengan SQL Server. MS DTC adalah fasilitas transaksi terdistribusi yang disediakan oleh Microsoft untuk sistem Microsoft Windows. MS DTC menggunakan teknologi pemrosesan transaksi yang terbukti dari Microsoft untuk mendukung fitur XA seperti protokol penerapan terdistribusi dua fase lengkap dan pemulihan transaksi terdistribusi.
Untuk informasi selengkapnya tentang cara menggunakan transaksi terdistribusi, lihat Memahami transaksi XA.