JDBC 批處理

2018-09-28 19:59 更新

批處理

批處理是指你將關(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ù)目。

  • 正如你可以添加語(yǔ)句到批處理中,你也可以用 clearBatch() 方法刪除它們。此方法刪除所有用 addBatch() 方法添加的語(yǔ)句。但是,你不能有選擇性地選擇要?jiǎng)h除的語(yǔ)句。

批處理和 Statement 對(duì)象

使用 Statement 對(duì)象來使用批處理所需要的典型步驟如下所示-

  • 使用 createStatement() 方法創(chuàng)建一個(gè) Statement 對(duì)象。
  • 使用 setAutoCommit() 方法將自動(dòng)提交設(shè)為 false。
  • 被創(chuàng)建的 Statement 對(duì)象可以使用 addBatch() 方法來添加你想要的所有SQL語(yǔ)句。
  • 被創(chuàng)建的 Statement 對(duì)象可以用 executeBatch() 將所有的 SQL 語(yǔ)句執(zhí)行。
  • 最后,使用 commit() 方法提交所有的更改。

示例

下面的代碼段提供了一個(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ì)象

使用 prepareStatement 對(duì)象來使用批處理需要的典型步驟如下所示-

  • 使用占位符創(chuàng)建 SQL 語(yǔ)句。
  • 使用任一 prepareStatement() 方法創(chuàng)建 prepareStatement 對(duì)象。
  • 使用 setAutoCommit() 方法將自動(dòng)提交設(shè)為 false。
  • 被創(chuàng)建的 Statement 對(duì)象可以使用 addBatch() 方法來添加你想要的所有 SQL 語(yǔ)句。
  • 被創(chuàng)建的 Statement 對(duì)象可以用 executeBatch() 將所有的 SQL 語(yǔ)句執(zhí)行。
  • 最后,使用 commit() 方法提交所有的更改。

下面的代碼段提供了一個(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();
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)