什麼是 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......
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP