JDBC批量处理
批量处理允许将相关的SQL语句分组到批处理中,并通过对数据库的一次调用提交它们。
当需要一次向数据库发送多个SQL语句时,可以减少连接数据库的开销,从而提高性能。
毕竟数据库的增删改查,都是对硬盘的操作,避免对硬盘的频繁操作是很有必要的。
PrepareStatement批处理
步骤:
- 使用占位符创建SQL语句。
- 使用prepareStatement() 方法创建PrepareStatement对象。
- 使用setAutoCommit() 将auto-commit设置为false 。(可选)
- 使用addBatch() 方法在创建的语句对象上添加您喜欢的SQL语句到批处理中。
- 在创建的语句对象上使用executeBatch() 方法执行所有SQL语句。
- 最后,使用commit() 方法提交所有更改。(可选)
注意: 如果自动提交setAutoCommit不修改为false,并其不设置提交(默认状态),是执行一条语句,提交一条语句,批量处理的时候也是如此,速度会很慢,所以要开启事务,取消自动提交,最后统一提交 另外在配置文件的url后补充:【&rewriteBatchedStatements=true】也可以进一步提高速度
//addBatch、excuteBatch、clearBatch
public class Demo2 {
public static void main(String[] args) throws SQLException {
/**
* 预添加只能处理【一种】语句,不像Statement,添加的同时可以进行更新语句操作
* 在url后面添加【&rewriteBatchedStatements=true】可以快速批量处理
*/
//这里使用了DBUtils工具类
Connection conn = DBUtils.getConnection();
PreparedStatement statement = conn.prepareStatement("insert into user(id,username,password,email,phone) values (?, ?, ?, ?, ?)");
//批处理,每一千条数据就进行处理
for (int i = 1000; i < 11000; i++) {
statement.setInt(1, i);
statement.setString(2, "朱厚熜");
statement.setString(3, "11234");
statement.setString(4, "zhuhouco