mysql --batch_sql批处理(batch)的简单使用

批处理指的是一次操作中执行多条SQL语句,相比于一次一次执行效率会提高很多

批处理主要是分两步:

将要执行的SQL语句保存

执行SQL语句

Statement和PreparedStatement都支持批处理操作,PreparedStatement的批处理方式:

方法:

void addBatch():将要执行的SQL先保存起来,先不执行,这个方法在设置完所有的占位符之后调用

int[] executeBatch():这个方法用来执行SQL语句,这个方法会将批处理中所有SQL语句执行

mysql默认批处理是关闭的,所以还需要去打开mysql的批处理:

rewriteBatchedStatements=true

需要将以上的参数添加到mysql的url地址中,不加的话,也能执行,但并不是真正的批处理,很慢。

注意:低版本的mysql-jdbc驱动也不支持批处理,一般都是在修改的时候使用批处理,查询的时候不使用!(mysql-connector-java-5.1.7-bin.jar不支持,mysql-connector-java-5.1.42.jar支持)

1、创建一张新的数据表

CREATE TABLEstudent(

idINT PRIMARY KEYAUTO_INCREMENT,

NAMEVARCHAR(50)

)

2、引入批处理

1 @Test//测试批处理

2 public voidtestBatch(){3 //向student表中插入10000条数据4 //准备两个变量

5 Connection connection = null;6 PreparedStatement ps = null;7 try{8 conn = DBUtil.getConn();//获取数据库连接

9 String sql = "INSERT INTO student(NAME) VALUES(?)";//准备SQL模板

10 ps = conn.prepareStatement(sql);//获取PrepareStatement11 //创建一个for循环,来设置占位符

12 for(int i = 0; i < 1000 ;i++){13 ps.setString(1,"stu"+i);//填充占位符

14 ps.addBatch();//添加到批处理方法中,调用无参的方法,有参的是Statement来调用的!

15 }16

17 long start = System.currentTimeMillis();//获取一个时间戳

18 ps.executeBatch();//执行批处理

19 long end = System.currentTimeMillis();//获取一个时间戳

20 System.out.println("用时:"+(end-start));21 } catch(SQLException e) {22 e.printStackTrace();23 }24 }

批处理执行效率高,资源利用率好!

插入1000条数据(没有开启批处理):13120ms

插入1000条数据(开启批处理):517ms

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值