首页 > 学院 > 开发设计 > 正文

JDBC之批处理

2019-11-14 22:10:48
字体:
来源:转载
供稿:网友
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语句。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表