批次處理允許將相關的SQL語句分組到批次處理中,並通過對資料庫的一次呼叫來提交它們,一次執行完成與資料庫之間的互動。
一次向資料庫傳送多個SQL語句時,可以減少通訊開銷,從而提高效能。
DatabaseMetaData.supportsBatchUpdates()
方法來確定目標資料庫是否支援批次更新處理。如果JDBC驅動程式支援此功能,該方法將返回true
。Statement
,PreparedStatement
和CallableStatement
的addBatch()
方法用於將單個語句新增到批次處理。 executeBatch()
用於執行組成批次的所有語句。executeBatch()
返回一個整數陣列,陣列的每個元素表示相應更新語句的更新計數。clearBatch()
方法刪除它們。此方法將刪除所有使用addBatch()
方法新增的語句。 但是,無法指定選擇某個要刪除的語句。以下是使用Statement
物件的批次處理的典型步驟序列 -
createStatement()
方法建立Statement
物件。setAutoCommit()
將自動提交設定為false
。addBatch()
方法在建立的Statement
物件上新增SQL語句到批次處理中。Statement
物件上使用executeBatch()
方法執行所有SQL語句。commit()
方法提交所有更改。以下程式碼片段提供了使用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,'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();
為了更好的理解,建議學習和研究「JDBC批次處理範例程式碼」。
以下是使用PrepareStatement
物件進行批次處理的典型步驟順序 -
prepareStatement()
方法建立PrepareStatement
物件。setAutoCommit()
將自動提交設定為false
。addBatch()
方法在建立的Statement
物件上新增SQL語句到批次處理中。Statement
物件上使用executeBatch()
方法執行所有SQL語句。commit()
方法提交所有更改。以下程式碼段提供了使用PreparedStatement
物件進行批次更新的範例 -
// 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();
為了更好的理解,建議學習和研究「JDBC批次處理範例程式碼」