当前位置:   article > 正文

对MySQL数据库进行批量处理操作_mysql批处理

mysql批处理

目录

1.使用Statement批量插入数据:

2.使用PreparedStatement批量插入数据:

3.在2的基础上添加Batch缓存:

4.在3的基础上增加取消自动提交数据的功能


由于数据库本身就可以批量进行选择(例如 select * from customers),

删除(例如delete * from customers)。所以本章主要讲解数据库如何实现数据的批量插入

1.使用Statement批量插入数据:

  1. package test_batch_insert;
  2. import java.sql.Connection;
  3. import java.sql.Statement;
  4. /*
  5. * 使用Statement对象插入1000条数据
  6. * 效率太慢,不必推荐使用 花费:40993毫秒
  7. */
  8. import org.junit.Test;
  9. import myjdbc.utils.JDBCUtil;
  10. public class TestStatementInsert {
  11. @Test
  12. public void testInsert() throws Exception {
  13. Connection conn = JDBCUtil.getConnection();
  14. Statement statement = conn.createStatement();
  15. long t1 = System.currentTimeMillis();
  16. for(int i=0;i<1000;i++) {
  17. String sql = "insert into aa(name) values('name_" + i +"')";
  18. statement.execute(sql);
  19. }
  20. long t2 = System.currentTimeMillis();
  21. System.out.println(t2-t1);
  22. statement.close();
  23. }
  24. }

2.使用PreparedStatement批量插入数据:

  1. package test_batch_insert;
  2. /*
  3. * 使用Statement批处理(插入)1000条数据
  4. * 花费:40851ms
  5. */
  6. import java.sql.Connection;
  7. import java.sql.PreparedStatement;
  8. import org.junit.Test;
  9. import myjdbc.utils.JDBCUtil;
  10. public class TestPreparedStatementInsert {
  11. @Test
  12. public void testInsert() throws Exception {
  13. //获取连接
  14. Connection conn = JDBCUtil.getConnection();
  15. //获取PreparedStatement实例
  16. String sql = "insert into aa(name) values( ? )";
  17. PreparedStatement ps = conn.prepareStatement(sql);
  18. //计算运行时间
  19. long t1 = System.currentTimeMillis();
  20. //执行
  21. for(int i=1;i<=1000;i++) {
  22. ps.setObject(1, "name2_"+i);
  23. ps.execute();
  24. }
  25. long t2 = System.currentTimeMillis();
  26. System.out.println(t2-t1);
  27. //关闭资源
  28. JDBCUtil.closeResource(conn, ps);
  29. }
  30. }

3.在2的基础上添加Batch缓存:

  1. package test_batch_insert;
  2. /*
  3. * 使用Batch缓存,攒SQL语句,然后在一起提交执行,类似于IO流中的以Byte数组传流
  4. *
  5. * MySQL服务器默认是关闭批处理的,我们需要一个参数,让MySQL开启批处理的支持
  6. * 在配置文件url后面加上 ?rewriteBatchedStatements=true
  7. *或者使用更新的MySQL驱动:mysql-connector-java-5.1.37-bin.java
  8. *
  9. * 花费:41590ms
  10. */
  11. import java.sql.Connection;
  12. import java.sql.PreparedStatement;
  13. import org.junit.Test;
  14. import myjdbc.utils.JDBCUtil;
  15. public class TestPreparedStatementInsert02 {
  16. @Test
  17. public void testInsert() throws Exception {
  18. //获取连接
  19. Connection conn = JDBCUtil.getConnection();
  20. //获取PreparedStatement实例
  21. String sql = "insert into aa(name) values( ? )";
  22. PreparedStatement ps = conn.prepareStatement(sql);
  23. //计算运行时间
  24. long t1 = System.currentTimeMillis();
  25. //执行
  26. for(int i=1;i<=1000;i++) {
  27. ps.setObject(1, "name3_"+i);
  28. //1.攒SQL
  29. ps.addBatch();
  30. if(i%500==0) {
  31. //执行Batch
  32. ps.executeBatch();
  33. //清空Batch
  34. ps.clearBatch();
  35. }
  36. }
  37. long t2 = System.currentTimeMillis();
  38. System.out.println(t2-t1);
  39. //关闭资源
  40. JDBCUtil.closeResource(conn, ps);
  41. }
  42. }

4.在3的基础上增加取消自动提交数据的功能

  1. package test_batch_insert;
  2. /*
  3. * 使用Batch缓存,攒SQL语句,然后在一起提交执行,类似于IO流中的以Byte数组传流
  4. *
  5. * 设置不允许自动提交数据 conn.setAutoCommit(false);
  6. * 提交数据 conn.commit();
  7. *
  8. * 花费:440ms
  9. *
  10. */
  11. import java.sql.Connection;
  12. import java.sql.PreparedStatement;
  13. import org.junit.Test;
  14. import myjdbc.utils.JDBCUtil;
  15. public class TestPreparedStatementInsert03 {
  16. @Test
  17. public void testInsert() throws Exception {
  18. //获取连接
  19. Connection conn = JDBCUtil.getConnection();
  20. //设置不允许自动提交数据
  21. conn.setAutoCommit(false);
  22. //获取PreparedStatement实例
  23. String sql = "insert into aa(name) values( ? )";
  24. PreparedStatement ps = conn.prepareStatement(sql);
  25. //计算运行时间
  26. long t1 = System.currentTimeMillis();
  27. //执行
  28. for(int i=1;i<=1000;i++) {
  29. ps.setObject(1, "name3_"+i);
  30. //1.攒SQL
  31. ps.addBatch();
  32. if(i%500==0) {
  33. //执行Batch
  34. ps.executeBatch();
  35. //清空Batch
  36. ps.clearBatch();
  37. }
  38. }
  39. //提交数据
  40. conn.commit();
  41. long t2 = System.currentTimeMillis();
  42. System.out.println(t2-t1);
  43. //关闭资源
  44. JDBCUtil.closeResource(conn, ps);
  45. }
  46. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/数据灵魂/article/detail/61825
推荐阅读
相关标签
  

闽ICP备14008679号