0%

Java-42-JDBC批处理

什么是JDBC批处理

JDBC批处理是指,批量运行数据库的增删改查操作。

例如:当需要对数据库进行大量的数据插入操作时,如果一条一条的数据插入速度非常缓慢,这个时候就需要使用到批处理技术,将插入数据的操作进行积攒,当达到设置的指定数量时进行一次插入所有批次数据,这样做会大大减少对数据库访问所消耗的时间。

操作演示

我们模拟大量的数据插入操作,使用循环对数据库插入10万条数据。

  • 普通写法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
往数据库中插入10万跳数据,普通方法,速度很慢
*/
@Test
public void test() throws SQLException {
Connection connection = JDBCUtils.getConnection();

String sql = "insert into student values(?, ?, ?);";

PreparedStatement preparedStatement = connection.prepareStatement(sql);

long startTime = System.currentTimeMillis();
for (int i = 1; i <= 100000; i++) {
preparedStatement.setInt(1, i);
preparedStatement.setString(2, "value"+i);
preparedStatement.setInt(3, 100+i);

preparedStatement.executeUpdate();
}

long endTime = System.currentTimeMillis();
System.out.println("一共花费了" + (endTime - startTime) + "毫秒");
JDBCUtils.close(connection, preparedStatement);
}

清空并查看数据库数据:

1
2
delete from student;
select count(*) from student;

image-20230628210028189

运行代码开始插入数据。经过285826毫米才完成数据的插入工作。

image-20230628210824304

在数据库中查看数据是否插入成功。

1
select count(*) from student;

数据插入成功。

image-20230628210921586

  • 接下来演示批处理操作

要想使用批处理操作首先需要修改配置文件。如下所示。

image-20230628211456332

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
往数据库中插入10万跳数据,批处理方法,速度极快
*/
@Test
public void test2() throws SQLException {
Connection connection = JDBCUtils.getConnection();

String sql = "insert into student values(?, ?, ?);";

PreparedStatement preparedStatement = connection.prepareStatement(sql);

long startTime = System.currentTimeMillis();
for (int i = 1; i <= 100000; i++) {
preparedStatement.setInt(1, i);
preparedStatement.setString(2, "value"+i);
preparedStatement.setInt(3, 100+i);

preparedStatement.addBatch();

if (i % 1000 == 0){
// 每1000次运行一次批处理
preparedStatement.executeBatch();
// 运行完后要清空批处理
preparedStatement.clearBatch();
}
}
long endTime = System.currentTimeMillis();
System.out.println("一共花费了" + (endTime - startTime) + "毫秒");
JDBCUtils.close(connection, preparedStatement);
}

清空并查看数据库数据:

1
2
delete from student;
select count(*) from student;

image-20230628210028189

运行代码开始插入数据。可以看到仅花费了1182毫秒数据就插入完成。

image-20230628211040886

在数据库中查看数据是否插入成功。

1
select count(*) from student;

数据插入成功。

image-20230628210921586

-------------本文结束感谢您的阅读-------------