什麼是 JDBC 中的引數化批次更新?請舉例說明?


將一組 INSERT 或 UPDATE 或 DELETE 命令(這些命令會生成更新計數值)組合在一起並立即執行,這種機制稱為批次更新。

如果使用引數傳遞查詢進行批次更新,則稱為引數化批次更新。

通常,要執行批次更新,需要使用 **addBatch()** 方法新增所有必需的語句,並使用 **executeBatch()** 方法執行它們,如下所示:

//Creating a Statement object
Statement stmt = con.createStatement();
//Setting auto-commit false
con.setAutoCommit(false);
//Adding the statements to batch
stmt.addBatch("INSERT INTO Sales VALUES ('KeyBoard', 'Amith', 'January', 1000, 'Hyderabad')");
stmt.addBatch("INSERT INTO Sales VALUES ('Earphones', 'SUMITH', 'March', 500, 'Vishakhapatnam')");
stmt.addBatch("INSERT INTO Sales VALUES ('Mouse', 'Sudha', 'September', 200, 'Vijayawada')");
//Executing the batch
stmt.executeBatch();

如果您觀察上面的程式碼,我們會反覆將語句的某些部分新增到批處理中,而不是這樣做,您可以執行引數化批次更新,其中您使用預處理語句並建立帶有佔位符的查詢,並使用 setter 方法將值傳遞給這些佔位符。

新增值時,需要將查詢的每一組值新增到批處理中,然後立即執行它們。

建立引數化批次更新

要建立引數化批次更新,需要建立一個預處理語句,以使用佔位符插入、更新或刪除值。

使用 setXXX() 語句將值設定為佔位符引數。使用 addbatch() 方法將每一組值新增到批處理中,最後使用 executeBatch 方法執行批處理。

**注意:**在將語句新增到批處理之前,需要使用 **con.setAutoCommit(false)** 關閉自動提交,並在執行批處理後,需要使用 **con.commit()** 方法儲存更改。

示例

假設我們在資料庫中建立了一個名為 Sales 的表,其描述如下:

+-------------------+--------------+------+-----+---------+-------+
| Field             | Type         | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+-------+
| Product_Name      | varchar(255) | YES  |     | NULL    |       |
| Name_Of_Customer  | varchar(255) | YES  |     | NULL    |       |
| Month_Of_Dispatch | varchar(255) | YES  |     | NULL    |       |
| Price             | int(11)      | YES  |     | NULL    |       |
| Location          | varchar(255) | YES  |     | NULL    |       |
+-------------------+--------------+------+-----+---------+-------+

此示例嘗試使用引數化批次更新將一組語句插入到上述表中。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
public class ParameterizedBatchUpdate {
   public static void main(String args[])throws Exception {
      //Getting the connection
      String mysqlUrl = "jdbc:mysql:///testDB";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //Creating a Statement object
      Statement stmt = con.createStatement();
      //Setting auto-commit false
      con.setAutoCommit(false);
      PreparedStatement pstmt = con.prepareStatement("INSERT INTO Sales VALUES (?, ?, ?, ?, ?)");
      pstmt.setString(1, "KeyBoard");
      pstmt.setString(2, "Amith");
      pstmt.setString(3, "January");
      pstmt.setInt(4, 1000);
      pstmt.setString(5, "Hyderabad");
      pstmt.addBatch();

      pstmt.setString(1, "Earphones");
      pstmt.setString(2, "Sumith");
      pstmt.setString(3, "March");
      pstmt.setInt(4, 500);
      pstmt.setString(5, "Vishakhapatnam");
      pstmt.addBatch();

      pstmt.setString(1, "Mouse");
      pstmt.setString(2, "Sudha");
      pstmt.setString(3, "September");
      pstmt.setInt(4, 500);
      pstmt.setString(5, "Vishakhapatnam");
      pstmt.addBatch();

      //Executing the batch
      stmt.executeBatch();
      //Saving the changes
      con.commit();
      System.out.println("Records inserted......");
   }
}

輸出

Connection established......
Records inserted......

更新於: 2019-07-30

732 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.