批處理是指你將關(guān)聯(lián)的 SQL 語(yǔ)句組合成一個(gè)批處理,并將他們當(dāng)成一個(gè)調(diào)用提交給數(shù)據(jù)庫(kù)。
當(dāng)你一次發(fā)送多個(gè) SQL 語(yǔ)句到數(shù)據(jù)庫(kù)時(shí),可以減少通信的資源消耗,從而提高了性能。
JDBC 驅(qū)動(dòng)程序不一定支持該功能。你可以使用 DatabaseMetaData.supportsBatchUpdates() 方法來確定目標(biāo)數(shù)據(jù)庫(kù)是否支持批處理更新。如果你的JDBC驅(qū)動(dòng)程序支持此功能,則該方法返回值為 true。
Statement,PreparedStatement 和 CallableStatement 的 addBatch() 方法用于添加單個(gè)語(yǔ)句到批處理。
executeBatch() 方法用于啟動(dòng)執(zhí)行所有組合在一起的語(yǔ)句。
executeBatch() 方法返回一個(gè)整數(shù)數(shù)組,數(shù)組中的每個(gè)元素代表了各自的更新語(yǔ)句的更新數(shù)目。
使用 Statement 對(duì)象來使用批處理所需要的典型步驟如下所示-
下面的代碼段提供了一個(gè)使用 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,'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();
使用 prepareStatement 對(duì)象來使用批處理需要的典型步驟如下所示-
下面的代碼段提供了一個(gè)使用 PrepareStatement 對(duì)象批量更新的示例-
// 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();
更多建議: