鍍金池/ 教程/ Java/ JDBC批量處理
JDBC Like子句實(shí)例
JDBC異常
JDBC排序數(shù)據(jù)實(shí)例
JDBC事務(wù)保存點(diǎn)(setSavepoint, releaseSavepoint )實(shí)例
JDBC結(jié)果集
JDBC Statement對(duì)象執(zhí)行批量處理實(shí)例
JDBC事務(wù)
JDBC SQL語(yǔ)法
JDBC快速入門教程
JDBC創(chuàng)建數(shù)據(jù)庫(kù)實(shí)例
JDBC流ASCII和二進(jìn)制數(shù)據(jù)
JDBC刪除表實(shí)例
JDBC Statements, PreparedStatement和CallableStatement語(yǔ)句
JDBC WHERE子句條件實(shí)例
JDBC插入數(shù)據(jù)實(shí)例
JDBC驅(qū)動(dòng)程序類型
JDBC環(huán)境配置
JDBC數(shù)據(jù)庫(kù)連接
JDBC刪除數(shù)據(jù)實(shí)例
JDBC PrepareStatement對(duì)象執(zhí)行批量處理實(shí)例
JDBC刪除數(shù)據(jù)庫(kù)實(shí)例
JDBC事務(wù)提交/回滾實(shí)例
JDBC更新數(shù)據(jù)實(shí)例
JDBC存儲(chǔ)過程調(diào)用
JDBC教程
JDBC批量處理
JDBC創(chuàng)建表實(shí)例
JDBC數(shù)據(jù)類型
JDBC是什么?
JDBC簡(jiǎn)單示例代碼
JDBC選擇數(shù)據(jù)庫(kù)實(shí)例
JDBC查詢數(shù)據(jù)實(shí)例

JDBC批量處理

批量處理允許將相關(guān)的SQL語(yǔ)句分組到批處理中,并通過對(duì)數(shù)據(jù)庫(kù)的一次調(diào)用來提交它們,一次執(zhí)行完成與數(shù)據(jù)庫(kù)之間的交互。

一次向數(shù)據(jù)庫(kù)發(fā)送多個(gè)SQL語(yǔ)句時(shí),可以減少通信開銷,從而提高性能。

  • 不需要JDBC驅(qū)動(dòng)程序來支持此功能。應(yīng)該使用DatabaseMetaData.supportsBatchUpdates()方法來確定目標(biāo)數(shù)據(jù)庫(kù)是否支持批量更新處理。如果JDBC驅(qū)動(dòng)程序支持此功能,該方法將返回true。
  • Statement,PreparedStatementCallableStatementaddBatch()方法用于將單個(gè)語(yǔ)句添加到批處理。 executeBatch()用于執(zhí)行組成批量的所有語(yǔ)句。
  • executeBatch()返回一個(gè)整數(shù)數(shù)組,數(shù)組的每個(gè)元素表示相應(yīng)更新語(yǔ)句的更新計(jì)數(shù)。
  • 就像將批處理語(yǔ)句添加到處理中一樣,可以使用clearBatch()方法刪除它們。此方法將刪除所有使用addBatch()方法添加的語(yǔ)句。 但是,無法指定選擇某個(gè)要?jiǎng)h除的語(yǔ)句。

使用Statement對(duì)象進(jìn)行批處理

以下是使用Statement對(duì)象的批處理的典型步驟序列 -

  • 使用createStatement()方法創(chuàng)建Statement對(duì)象。
  • 使用setAutoCommit()將自動(dòng)提交設(shè)置為false。
  • 使用addBatch()方法在創(chuàng)建的Statement對(duì)象上添加SQL語(yǔ)句到批處理中。
  • 在創(chuàng)建的Statement對(duì)象上使用executeBatch()方法執(zhí)行所有SQL語(yǔ)句。
  • 最后,使用commit()方法提交所有更改。

實(shí)例

以下代碼片段提供了使用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對(duì)象進(jìn)行批處理的典型步驟順序 -

  • 使用占位符創(chuàng)建SQL語(yǔ)句。
  • 使用prepareStatement()方法創(chuàng)建PrepareStatement對(duì)象。
  • 使用setAutoCommit()將自動(dòng)提交設(shè)置為false。
  • 使用addBatch()方法在創(chuàng)建的Statement對(duì)象上添加SQL語(yǔ)句到批處理中。
  • 在創(chuàng)建的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批處理示例代碼