JDBC中的批处理是什么?


将相关的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();

更新于:2019年7月30日

256 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告