需求

  1. 一次性插入很多条记录,一条一条插入太慢,开启批处理操作,一次性插入

代码演示

  1. Java代码如下 ```java package com.wisdom.java02;

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.Statement;

import org.junit.Test;

public class BatchTest {

  1. /*
  2. * 未使用批量插入数据耗时36814
  3. * */
  4. @Test
  5. public void batchTest01() throws Exception{
  6. long start = System.currentTimeMillis();
  7. // 注册驱动
  8. Class.forName("com.mysql.jdbc.Driver");
  9. // 连接数据库
  10. String url = "jdbc:mysql://192.168.160.131:3306/subquery";
  11. Connection conn = DriverManager.getConnection(url,"root","2wsx#EDC");
  12. // 操作数据库
  13. String sql = "insert into dept values(?,?,?)";
  14. PreparedStatement pre = conn.prepareStatement(sql);
  15. for(int i = 0; i < 1000; i++){
  16. pre.setObject(1, null);
  17. pre.setObject(2, "dname"+i);
  18. pre.setObject(3, "loc"+i);
  19. pre.executeUpdate();
  20. }
  21. // 关闭资源
  22. pre.close();
  23. conn.close();
  24. long end = System.currentTimeMillis();
  25. System.out.println("耗时 : " + (end-start));
  26. }
  27. /*
  28. * 使用批量插入数据耗时1959
  29. * */
  30. @Test
  31. public void batchTest02() throws Exception{
  32. long start = System.currentTimeMillis();
  33. // 注册驱动
  34. Class.forName("com.mysql.jdbc.Driver");
  35. // 连接数据库,rewriteBatchedStatements=true,代表开启批量操作
  36. String url = "jdbc:mysql://192.168.160.131:3306/subquery?rewriteBatchedStatements=true";
  37. Connection conn = DriverManager.getConnection(url,"root","2wsx#EDC");
  38. // 操作数据库
  39. String sql = "insert into dept values(?,?,?)";
  40. PreparedStatement pre = conn.prepareStatement(sql);
  41. for(int i = 0; i < 1000; i++){
  42. pre.setObject(1, null);
  43. pre.setObject(2, "dname"+i);
  44. pre.setObject(3, "loc"+i);
  45. // //添加到批处理组中,先攒着
  46. pre.addBatch();
  47. }
  48. // 执行批处理操作
  49. pre.executeBatch();
  50. // 关闭资源
  51. pre.close();
  52. conn.close();
  53. long end = System.currentTimeMillis();
  54. System.out.println("耗时 : " + (end-start));
  55. }

}

```