[数据库] 数据库批处理

132 0
Honkers 2025-6-5 07:45:54 来自手机 | 显示全部楼层 |阅读模式

数据库批处理

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

批处理操作数据库的过程主要是分两步:

  • 将要执行的SQL语句保存
  • 执行保存的SQL语句

如何实现批处理
Statement和PreparedStatement都支持批处理操作,这里我们只说明PreparedStatement的批处理方式:

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

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

  • mysql默认批处理是关闭的,所以还需要去打开mysql的批处理:
    需要在mysql的url地址中加入一下参数:
    rewriteBatchedStatements=true
    例如:URL = “jdbc:mysql://127.0.0.1:3306/test?rewriteBatchedStatements=true”;

Demo
1.创建一张新的数据表

  1. //向test表中插入10000条数据
  2. @Test//测试批处理
  3. public void testBatch(){
  4. //向test表中插入10000条数据
  5. Connection connection = null;
  6. PreparedStatement ps = null;
  7. try {
  8. /*
  9.      *获取数据库连接 数据库链接操作在此不进行赘述
  10.      *原生数据库操作可参考:http://www.cnblogs.com/Mr-Dawei/p/7455324.html
  11.     */
  12. connection=XXXX;
  13. //sql语句编写
  14. String sql = "INSERT INTO test(uname) VALUES(?)";
  15. //获取PrepareStatement
  16. ps = connection.prepareStatement(sql);
  17. //创建一个for循环,来设置占位符参数数
  18. for(int i = 0; i < 10000 ;i++){
  19. ps.setString(1,"test"+i);
  20. //添加到批处理方法中,调用无参的,有参的是Statement来调用的!
  21. ps.addBatch();
  22. }
  23. //获取一个时间戳 可以测试执行效率
  24. long start = System.currentTimeMillis();
  25. //统一执行执行批处理
  26. ps.executeBatch();
  27. //获取一个时间戳
  28. long end = System.currentTimeMillis();
  29. System.out.println("共花费了:"+(end-start));
  30. } catch (SQLException e) {
  31. e.printStackTrace();
  32. } finally{
  33. //逆序关闭资源
  34. }
  35. }
复制代码

参考文章:
https://www.cnblogs.com/Mr-Dawei/p/7455496.html

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行