什么是 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