Nhóm một tập hợp các lệnh INSERT hoặc, UPDATE hoặc, DELETE (những lệnh này tạo ra giá trị đếm cập nhật) và thực thi chúng ngay lập tức cơ chế này được gọi là cập nhật hàng loạt.
Nếu bạn vượt qua các tham số bằng cách sử dụng cập nhật hàng loạt thì nó được gọi là cập nhật hàng loạt được tham số hóa.
Nói chung, để thực hiện cập nhật hàng loạt, bạn cần thêm tất cả các câu lệnh bắt buộc bằng cách sử dụng addBatch () và thực thi chúng bằng cách sử dụng executeBatch () phương pháp như:
//Creating a Statement object Statement stmt = con.createStatement(); //Setting auto-commit false con.setAutoCommit(false); //Adding the statements to batch stmt.addBatch("INSERT INTO Sales VALUES ('KeyBoard', 'Amith', 'January', 1000, 'Hyderabad')"); stmt.addBatch("INSERT INTO Sales VALUES ('Earphones', 'SUMITH', 'March', 500, 'Vishakhapatnam')"); stmt.addBatch("INSERT INTO Sales VALUES ('Mouse', 'Sudha', 'September', 200, 'Vijayawada')"); //Executing the batch stmt.executeBatch();
Nếu bạn quan sát đoạn mã trên ở đây, chúng tôi đang thêm lặp đi lặp lại phần nhất định của câu lệnh vào lô thay vì điều này, bạn có thể thực hiện cập nhật hàng loạt được tham số hóa trong đó bạn sử dụng câu lệnh đã chuẩn bị và tạo truy vấn với các giá trị giữ chỗ và truyền vào. cho những người nắm giữ vị trí này bằng cách sử dụng các phương thức setter.
Trong khi thêm giá trị, bạn cần thêm từng bộ giá trị của truy vấn vào lô và sau đó thực thi chúng cùng một lúc.
Tạo cập nhật hàng loạt được tham số hóa
Để tạo cập nhật hàng loạt được tham số hóa, bạn cần tạo một câu lệnh chuẩn bị sẵn để chèn, cập nhật hoặc xóa các giá trị bằng trình giữ chỗ.
Đặt giá trị cho trình giữ chỗ, tham số bằng câu lệnh setXXX (). Thêm từng bộ giá trị vào lô bằng phương thức addbatch (), Cuối cùng thực thi lô bằng phương thức executeBatch.
Lưu ý: Trước khi thêm các câu lệnh vào lô, bạn cần tắt tính năng tự động cam kết bằng cách sử dụng con.setAutoCommit (false) và sau khi thực hiện lô, bạn cần lưu các thay đổi bằng cách sử dụng con.commit () phương pháp.
Ví dụ
Giả sử chúng ta đã tạo một bảng có tên Bán hàng trong cơ sở dữ liệu với mô tả sau:
+-------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------------+--------------+------+-----+---------+-------+ | Product_Name | varchar(255) | YES | | NULL | | | Name_Of_Customer | varchar(255) | YES | | NULL | | | Month_Of_Dispatch | varchar(255) | YES | | NULL | | | Price | int(11) | YES | | NULL | | | Location | varchar(255) | YES | | NULL | | +-------------------+--------------+------+-----+---------+-------+
Ví dụ này cố gắng chèn một tập hợp các câu lệnh vào bảng được đề cập ở trên bằng cách sử dụng cập nhật hàng loạt được tham số hóa.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.Statement; public class ParameterizedBatchUpdate { public static void main(String args[])throws Exception { //Getting the connection String mysqlUrl = "jdbc:mysql://localhost/testDB"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password"); System.out.println("Connection established......"); //Creating a Statement object Statement stmt = con.createStatement(); //Setting auto-commit false con.setAutoCommit(false); PreparedStatement pstmt = con.prepareStatement("INSERT INTO Sales VALUES (?, ?, ?, ?, ?)"); pstmt.setString(1, "KeyBoard"); pstmt.setString(2, "Amith"); pstmt.setString(3, "January"); pstmt.setInt(4, 1000); pstmt.setString(5, "Hyderabad"); pstmt.addBatch(); pstmt.setString(1, "Earphones"); pstmt.setString(2, "Sumith"); pstmt.setString(3, "March"); pstmt.setInt(4, 500); pstmt.setString(5, "Vishakhapatnam"); pstmt.addBatch(); pstmt.setString(1, "Mouse"); pstmt.setString(2, "Sudha"); pstmt.setString(3, "September"); pstmt.setInt(4, 500); pstmt.setString(5, "Vishakhapatnam"); pstmt.addBatch(); //Executing the batch stmt.executeBatch(); //Saving the changes con.commit(); System.out.println("Records inserted......"); } }
Đầu ra
Connection established...... Records inserted......