Melakukan operasi batch
Untuk meningkatkan performa ketika beberapa pembaruan pada database SQL Server terjadi, Driver Microsoft JDBC untuk SQL Server menyediakan kemampuan untuk mengirimkan beberapa pembaruan sebagai satu unit kerja, juga disebut sebagai batch.
Kelas SQLServerStatement, SQLServerPreparedStatement, dan SQLServerCallableStatement semuanya dapat digunakan untuk mengirimkan pembaruan batch. Metode addBatch digunakan untuk menambahkan perintah. Metode clearBatch digunakan untuk menghapus daftar perintah. Metode executeBatch digunakan untuk mengirimkan semua perintah untuk diproses. Hanya pernyataan Bahasa Definisi Data (DDL) dan Bahasa Manipulasi Data (DML) yang menampilkan jumlah pembaruan sederhana yang dapat dijalankan sebagai bagian dari batch.
Metode executeBatch mengembalikan array nilai int yang sesuai dengan jumlah pembaruan setiap perintah. Jika salah satu perintah gagal, BatchUpdateException dilemparkan, dan Anda harus menggunakan metode getUpdateCounts dari kelas BatchUpdateException untuk mengambil array jumlah pembaruan. Jika perintah gagal, driver akan terus memproses perintah yang tersisa. Namun, jika perintah memiliki kesalahan sintaksis, pernyataan dalam batch gagal.
Catatan
Jika Anda tidak perlu menggunakan jumlah pembaruan, Anda dapat terlebih dahulu mengeluarkan pernyataan SET NOCOUNT ON ke SQL Server. Ini akan mengurangi lalu lintas jaringan dan juga meningkatkan performa aplikasi Anda.
Sebagai contoh, buat tabel berikut di database sampel AdventureWorks2022:
CREATE TABLE TestTable
(Col1 int IDENTITY,
Col2 varchar(50),
Col3 int);
Dalam contoh berikut, koneksi terbuka ke database sampel AdventureWorks2022 diteruskan ke fungsi, metode addBatch digunakan untuk membuat pernyataan yang akan dijalankan, dan metode executeBatch dipanggil untuk mengirimkan batch ke database.
public static void executeBatchUpdate(Connection con) {
try {
Statement stmt = con.createStatement();
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('X', 100)");
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Y', 200)");
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Z', 300)");
int[] updateCounts = stmt.executeBatch();
stmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
}