Java Mysql 简明教程

Java & MySQL - Batch Processing

批量处理允许将相关的 SQL 语句编组为一个批处理,然后用一次数据库调用提交它们。

一次将多个 SQL 语句发送到数据库时,可以减少通信开销,进而提升性能。

  1. JDBC 驱动程序不必支持此功能。您应使用 DatabaseMetaData.supportsBatchUpdates() 方法来确定目标数据库是否支持批量更新处理。如果您的 JDBC 驱动程序支持此功能,则该方法将返回 true。

  2. Statement、PreparedStatement 和 CallableStatement 的 addBatch() 方法用于将各语句添加到批处理中。 executeBatch() 用于开始执行所有组合在一起的语句。

  3. executeBatch() 返回一个整数数组,数组的每个元素都代表相应更新语句的更新计数。

  4. 就像可以将语句添加到批处理中进行处理一样,也可以使用 clearBatch() 方法移除语句。此方法将移除您用 addBatch() 方法添加的所有语句。但是,您不能有选择地选择要移除哪个语句。

Batching with Statement Object

以下是有关如何对语句对象使用批量处理的典型步骤序列:

  1. 使用 createStatement() 方法创建语句对象。

  2. 使用 setAutoCommit() 将自动提交设置为 false。

  3. 使用所创建的语句对象上的 addBatch() 方法向批处理中添加任意数量的 SQL 语句。

  4. 使用 executeStatement() 方法对已创建的语句对象执行所有 SQL 语句。

  5. 最后,使用 commit() 方法提交所有更改。

Example

以下代码片段提供了使用语句对象的一个批量更新示例:

// 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();

Batching with PrepareStatement Object

以下是一些使用批处理和 PrepareStatement 对象的典型步骤:

  1. 使用占位符创建 SQL 语句。

  2. 使用 prepareStatement() 方法创建 PrepareStatement 对象。

  3. 使用 setAutoCommit() 将自动提交设置为 false。

  4. 使用所创建的语句对象上的 addBatch() 方法向批处理中添加任意数量的 SQL 语句。

  5. 使用 executeStatement() 方法对已创建的语句对象执行所有 SQL 语句。

  6. 最后,使用 commit() 方法提交所有更改。

以下代码片段提供了使用 PrepareStatement 对象的一个批量更新示例:

// 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();