JDBC - Xử lý hàng loạt

Xử lý hàng loạt cho phép bạn nhóm các câu lệnh SQL liên quan thành một lô và gửi chúng bằng một lệnh gọi đến cơ sở dữ liệu.

Khi bạn gửi một số câu lệnh SQL đến cơ sở dữ liệu cùng một lúc, bạn sẽ giảm lượng chi phí giao tiếp, do đó cải thiện hiệu suất.

  • Trình điều khiển JDBC không bắt buộc phải hỗ trợ tính năng này. Bạn nên sử dụng phương thức DatabaseMetaData.supportsBatchUpdates () để xác định xem cơ sở dữ liệu đích có hỗ trợ xử lý cập nhật hàng loạt hay không. Phương thức trả về true nếu trình điều khiển JDBC của bạn hỗ trợ tính năng này.

  • Các addBatch()Phương thức Statement, PreparedStatementCallableStatement được sử dụng để thêm các câu lệnh riêng lẻ vào lô. CácexecuteBatch() được sử dụng để bắt đầu thực hiện tất cả các câu lệnh được nhóm lại với nhau.

  • Các executeBatch() trả về một mảng các số nguyên và mỗi phần tử của mảng biểu thị số lượng cập nhật cho câu lệnh cập nhật tương ứng.

  • Cũng như bạn có thể thêm các câu lệnh vào một lô để xử lý, bạn có thể xóa chúng bằng clearBatch()phương pháp. Phương thức này loại bỏ tất cả các câu lệnh bạn đã thêm bằng phương thức addBatch (). Tuy nhiên, bạn không thể chọn câu lệnh nào để loại bỏ một cách có chọn lọc.

Kết hợp với đối tượng tuyên bố

Dưới đây là một chuỗi các bước điển hình để sử dụng Xử lý hàng loạt với Đối tượng Câu lệnh -

  • Tạo một đối tượng Statement bằng cách sử dụng một trong hai phương thức createStatement () .

  • Đặt tự động cam kết thành false bằng setAutoCommit () .

  • Thêm bao nhiêu câu lệnh SQL bạn thích vào hàng loạt bằng phương thức addBatch () trên đối tượng câu lệnh đã tạo.

  • Thực thi tất cả các câu lệnh SQL bằng phương thức executeBatch () trên đối tượng câu lệnh đã tạo.

  • Cuối cùng, cam kết tất cả các thay đổi bằng phương thức commit () .

Thí dụ

Đoạn mã sau cung cấp một ví dụ về cập nhật hàng loạt bằng đối tượng Statement:

// Create statement object
Statement stmt = conn.createStatement();

// Set auto-commit to false
conn.setAutoCommit(false);

// Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(200,'Zia', 'Ali', 30)";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);

// Create one more SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(201,'Raj', 'Kumar', 35)";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);

// Create one more SQL statement
String SQL = "UPDATE Employees SET age = 35 " +
             "WHERE id = 100";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);

// Create an int[] to hold returned values
int[] count = stmt.executeBatch();

//Explicitly commit statements to apply changes
conn.commit();

Để hiểu rõ hơn, chúng ta hãy nghiên cứu về Mã lô - Ví dụ .

Kết hợp với Đối tượng Chuẩn bị

Dưới đây là một chuỗi các bước điển hình để sử dụng Xử lý hàng loạt với Đối tượng Chuẩn bị -

  1. Tạo câu lệnh SQL với trình giữ chỗ.

  2. Tạo đối tượng Prepatement bằng cách sử dụng một trong hai phương thức readyStatement () .

  3. Đặt tự động cam kết thành false bằng setAutoCommit () .

  4. Thêm bao nhiêu câu lệnh SQL bạn thích vào hàng loạt bằng phương thức addBatch () trên đối tượng câu lệnh đã tạo.

  5. Thực thi tất cả các câu lệnh SQL bằng phương thức executeBatch () trên đối tượng câu lệnh đã tạo.

  6. Cuối cùng, cam kết tất cả các thay đổi bằng phương thức commit () .

Đoạn mã sau cung cấp một ví dụ về cập nhật hàng loạt bằng đối tượng Chuẩn bị sẵn sàng -

// Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(?, ?, ?, ?)";

// Create PrepareStatement object
PreparedStatemen pstmt = conn.prepareStatement(SQL);

//Set auto-commit to false
conn.setAutoCommit(false);

// Set the variables
pstmt.setInt( 1, 400 );
pstmt.setString( 2, "Pappu" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 33 );
// Add it to the batch
pstmt.addBatch();

// Set the variables
pstmt.setInt( 1, 401 );
pstmt.setString( 2, "Pawan" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 31 );
// Add it to the batch
pstmt.addBatch();

//add more batches
.
.
.
.
//Create an int[] to hold returned values
int[] count = stmt.executeBatch();

//Explicitly commit statements to apply changes
conn.commit();

Để hiểu rõ hơn, chúng ta hãy nghiên cứu về Mã lô - Ví dụ .