批量處理允許將相關(guān)的SQL語(yǔ)句分組到批處理中,并通過對(duì)數(shù)據(jù)庫(kù)的一次調(diào)用來提交它們,一次執(zhí)行完成與數(shù)據(jù)庫(kù)之間的交互。
一次向數(shù)據(jù)庫(kù)發(fā)送多個(gè)SQL語(yǔ)句時(shí),可以減少通信開銷,從而提高性能。
DatabaseMetaData.supportsBatchUpdates()
方法來確定目標(biāo)數(shù)據(jù)庫(kù)是否支持批量更新處理。如果JDBC驅(qū)動(dòng)程序支持此功能,該方法將返回true
。Statement
,PreparedStatement
和CallableStatement
的addBatch()
方法用于將單個(gè)語(yǔ)句添加到批處理。 executeBatch()
用于執(zhí)行組成批量的所有語(yǔ)句。executeBatch()
返回一個(gè)整數(shù)數(shù)組,數(shù)組的每個(gè)元素表示相應(yīng)更新語(yǔ)句的更新計(jì)數(shù)。clearBatch()
方法刪除它們。此方法將刪除所有使用addBatch()
方法添加的語(yǔ)句。 但是,無法指定選擇某個(gè)要?jiǎng)h除的語(yǔ)句。以下是使用Statement
對(duì)象的批處理的典型步驟序列 -
createStatement()
方法創(chuàng)建Statement
對(duì)象。setAutoCommit()
將自動(dòng)提交設(shè)置為false
。addBatch()
方法在創(chuàng)建的Statement
對(duì)象上添加SQL語(yǔ)句到批處理中。Statement
對(duì)象上使用executeBatch()
方法執(zhí)行所有SQL語(yǔ)句。commit()
方法提交所有更改。以下代碼片段提供了使用Statement
對(duì)象的批量更新示例 -
// 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,'Ruby', 'Yang', 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,'Java', 'Lee', 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();
為了更好的理解,建議學(xué)習(xí)和研究“JDBC批處理示例代碼”。
以下是使用PrepareStatement
對(duì)象進(jìn)行批處理的典型步驟順序 -
prepareStatement()
方法創(chuàng)建PrepareStatement
對(duì)象。setAutoCommit()
將自動(dòng)提交設(shè)置為false
。addBatch()
方法在創(chuàng)建的Statement
對(duì)象上添加SQL語(yǔ)句到批處理中。Statement
對(duì)象上使用executeBatch()
方法執(zhí)行所有SQL語(yǔ)句。commit()
方法提交所有更改。以下代碼段提供了使用PreparedStatement
對(duì)象進(jìn)行批量更新的示例 -
// 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, "JDBC" );
pstmt.setString( 3, "Li" );
pstmt.setInt( 4, 33 );
// Add it to the batch
pstmt.addBatch();
// Set the variables
pstmt.setInt( 1, 401 );
pstmt.setString( 2, "CSharp" );
pstmt.setString( 3, "Liang" );
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();
為了更好的理解,建議學(xué)習(xí)和研究“JDBC批處理示例代碼”