JDBC 中的批处理是什么?
jdbcjava 8programmingobject oriented programming更新于 2024/10/20 21:32:17
将相关的 SQL 语句分组为一个批次并一次性执行/提交,这称为批处理。
在依次执行一组语句时,执行过程会同时从数据库切换到程序。
使用批处理,我们可以减少这种通信开销,并提高 Java 应用程序的性能。
例如,假设我们有一个名为 Emp 的表,其描述如下:
+----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | Name | varchar(255) | YES | | NULL | | | DOB | String | YES | | NULL | | | Location | varchar(255) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+
如果您想插入数据,我们通常会使用以下语句:
Stmt.execute("INSERT INTO Emp VALUES ('Amit', '30-9-1989', 'Hyderabad')");
Stmt.execute("INSERT INTO Emp VALUES ('Amit', '1-9-1989', 'Vishakhapatnam')");
并使用PreparedStatement作为:
String query = "INSERT INTO Emp(Name, String, Location) VALUES (?, ?, ?)"; PreparedStatement pstmt = con.prepareStatement(query); pstmt.setString(1, "Amit"); pstmt.setDate(2, "30-9-1989")); pstmt.setString(3, "Hyderabad"); pstmt.execute(); pstmt.setString(1, "Sumith"); pstmt.setDate(2, "1-9-1989"); //Friday, Sept 1, 1989 12:00:00 AM pstmt.setString(3, "Vishakhapatnam"); pstmt.execute();
如果您仔细观察这两种情况,就会发现我们分别执行了每条插入语句。这意味着,对于程序中的每条插入语句,当调用execute()方法时,插入语句都会在数据库中执行,然后再返回到程序中。
如果插入次数较少,这没有问题。但如果在插入大量记录时发生这种情况,可能会产生通信开销,并且程序执行时间会更长。
使用批处理,您只需使用Statement接口的addBatch()方法将语句添加到批处理中,然后稍后使用executeBatch()方法执行它们,如下所示:
Stmt.addBatch("INSERT INTO Emp VALUES ('Amit', '30-9-1989', 'Hyderabad')");
Stmt.addBatch("INSERT INTO Emp VALUES ('Amit', '1-9-1989', 'Vishakhapatnam')");
Stmt.executeBatch();
pstmt.setString(1, "Amit");
pstmt.setDate(2, "30-9-1989"));
pstmt.setString(3, "Hyderabad");
pstmt.addBatch();
pstmt.setString(1, "Sumith");
pstmt.setDate(2, "1-9-1989"); //Friday, Sept 1, 1989 12:00:00 AM
pstmt.setString(3, "Vishakhapatnam");
pstmt.addBatch();
pstmt.executeBatch();

