zoukankan      html  css  js  c++  java
  • JDBC之批处理

    JDBC之批处理

      现在有这么一个需求,要求把2000条记录插入表中,如果使用java代码来操作,我们可以使用Statement或者PreparedStatement来实现,通过循环来把SQL语句一条又一条地发送给数据库处理。我们知道,数据库处理SQL速度是非常快的,如果传输速度慢,跟不上处理速度,那么数据库就会出现等待现象。为了解决这个办法,我们可以一次发送多个SQL语句给数据库处理,这样就能增加效率,这时候我们就要用到批处理技术。

      然而,批处理也可以通过Statement和Preparement来实现,要用到的主要方法如下:

     Statement批处理操作:

        void addBatch(String sql)  --把SQL语句加到批处理缓冲区中

        int[] executeBatch()    --执行SQL缓冲区中的所有语句

        void clearBatch()      --清空缓存区中的所有SQL语句

     PreparedStatement操作:

        void addBatch(String sql)  --把一组参数加到参数缓冲区中

        int[] executeBatch()    --执行SQL缓冲区中的所有参数组

        void clearBatch()      --清空缓存区中的所有参数组

    下面就演示一下这些方法的用法吧~

    利用Statement

        @Test
        public void batchTest() throws Exception{
            //调用工具类获取连接
            connection = sqlUtil.getconnection();
            
            //生成Statemnt对象
            Statement statement = connection.createStatement();
            
            //把若干条SQL语句放到缓冲区中
            for(int i=1;i<=200;i++){
                //准备sql语句
                String sql = "insert into worker(wid,wname) values("+i+",'张三"+i+"')";
                //添加到缓冲区
                statement.addBatch(sql);
                
                if(i%20==0){
                    System.out.println("共"+ i +"条语句插入了表中");
                    //缓存区有20条指令时执行
                    statement.executeBatch();
                    //执行完清空缓存区
                    statement.clearBatch();
                }
            }
            //关闭连接
            sqlUtil.close(statement, connection);
        }

    利用PreparedStatement

        public void batchTest2() throws Exception{
            //调用工具类获取连接
            connection = sqlUtil.getconnection();
            
            //生成Statemnt对象
            PreparedStatement prepS = connection.prepareStatement("insert into worker(wid,wname) values(?,?)");
            
            //把若干条SQL语句放到缓冲区中
            for(int i=1;i<=200;i++){
                //设置参数
                prepS.setObject(1, i);
                String wname = "李四"+i;
                prepS.setObject(2, wname);
                
                //添加到缓冲区
                prepS.addBatch();
                
                if(i%20==0){
                    System.out.println("共"+ i +"条语句插入了表中");
                    //缓存区有20条指令时执行
                    prepS.executeBatch();
                    //执行完清空缓存区
                    prepS.clearBatch();
                }
            }
            //关闭连接
            sqlUtil.close(prepS, connection);
        }

    以上就是利用JDBC实现批处理了~

    如果想要执行效率最快,我们应该使用 prepareStatemnt + 批处理  这样的方式来执行多条SQL语句。

  • 相关阅读:
    Director.js路由
    高程第二天
    插件
    Github学习
    高程第一天
    盒子居中显示
    锋利的jq第四天
    锋利的jq第三天
    锋利的jq第二天
    锋利的jq第一天
  • 原文地址:https://www.cnblogs.com/vmax-tam/p/4153492.html
Copyright © 2011-2022 走看看