超简单使用批处理(batch)操作数据库

超简单使用批处理(batch)操作数据库

批处理(batch)是什么

批处理的执行就好比快递员的工作:

       未使用批处理的时候,快递员一次从分发点将一件快递发给客户;

     使用批处理,则是快递员将所有要派送的快递都用车带到发放处派给客户。

批处理(batch)操作数据库

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

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

       1.将要执行的SQL语句保存

       2.执行保存的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";

                

演示实例:   

            1.创建一张新的数据表

     CREATE TABLE test (
                     id INT PRIMARY KEY AUTO_INCREMENT,
                     uname VARCHAR(50)
      )

              2、测试源码

 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