Java Mysql 简明教程
Java & MySQL - Batch Processing
批量处理允许将相关的 SQL 语句编组为一个批处理,然后用一次数据库调用提交它们。
一次将多个 SQL 语句发送到数据库时,可以减少通信开销,进而提升性能。
-
JDBC 驱动程序不必支持此功能。您应使用 DatabaseMetaData.supportsBatchUpdates() 方法来确定目标数据库是否支持批量更新处理。如果您的 JDBC 驱动程序支持此功能,则该方法将返回 true。
-
Statement、PreparedStatement 和 CallableStatement 的 addBatch() 方法用于将各语句添加到批处理中。 executeBatch() 用于开始执行所有组合在一起的语句。
-
executeBatch() 返回一个整数数组,数组的每个元素都代表相应更新语句的更新计数。
-
就像可以将语句添加到批处理中进行处理一样,也可以使用 clearBatch() 方法移除语句。此方法将移除您用 addBatch() 方法添加的所有语句。但是,您不能有选择地选择要移除哪个语句。
Batching with Statement Object
以下是有关如何对语句对象使用批量处理的典型步骤序列:
-
使用 createStatement() 方法创建语句对象。
-
使用 setAutoCommit() 将自动提交设置为 false。
-
使用所创建的语句对象上的 addBatch() 方法向批处理中添加任意数量的 SQL 语句。
-
使用 executeStatement() 方法对已创建的语句对象执行所有 SQL 语句。
-
最后,使用 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 对象的典型步骤:
-
使用占位符创建 SQL 语句。
-
使用 prepareStatement() 方法创建 PrepareStatement 对象。
-
使用 setAutoCommit() 将自动提交设置为 false。
-
使用所创建的语句对象上的 addBatch() 方法向批处理中添加任意数量的 SQL 语句。
-
使用 executeStatement() 方法对已创建的语句对象执行所有 SQL 语句。
-
最后,使用 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();