jdbc中的批处理

导读:本篇文章讲解 jdbc中的批处理,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

本文主要讲述,面对多个sql语句【增,删,改】的执行,如何加快执行速度?

传统方法:

public class jdbcBat_ {
    // 同时处理多条数据【原始方法】
    @Test
    public void test1(){
        Connection connection = JDBCUtils.getConnection();
        PreparedStatement preStatement = null;
        String sql = "insert into admin2(name,pwd) values(?,?)";
        try {
            preStatement = connection.prepareStatement(sql);
            long start = System.currentTimeMillis();
            for(int i = 0;i<5000;i++){
                // 处理5000条sql语句
                preStatement.setString(1,"Tom"+i);
                preStatement.setString(2,"123"+i);
                preStatement.executeUpdate();
            }
            long end = System.currentTimeMillis();
            System.out.println("执行时间: "+(int) (end-start));
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.Close(null,preStatement,connection);
        }
    }
}

运行时间:

执行时间: 11393 //ms

使用批处理,即批量处理sql语句,不是一次执行完成,分批次:

在此之前,需要进行如下设置,

url=jdbc:mysql://localhost:3306/hspdb02?rewriteBatchedStatements=true

使得批处理语句可以执行,否则无效。

public class jdbcBat_ {
    // 处理多条数据,使用批处理
    @SuppressWarnings({"all"})
    @Test
    public void test2(){
        Connection connection = JDBCUtils.getConnection();
        PreparedStatement preStatement = null;
        String sql = "insert into admin2(name,pwd) values (?,?)";
        try{
            preStatement = connection.prepareStatement(sql);
            long start = System.currentTimeMillis();
            for(int i = 0;i<5000;i++){
                // 处理5000条sql语句
                preStatement.setString(1,"Tom"+i);
                preStatement.setString(2,"123"+i);
                preStatement.addBatch();
                if((i+1)%1000 == 0){
                    preStatement.executeBatch();
                    preStatement.clearBatch();
                }
            }
            long end = System.currentTimeMillis();
            System.out.println("执行时间: "+(int) (end-start));
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.Close(null,preStatement,connection);
        }
    }
}

重点语句:

if((i+1)%1000 == 0){
        preStatement.executeBatch();
        preStatement.clearBatch();
}

每当累计到1000条sql语句时,执行一次,注意执行完成之后,需要清理之前的sql语句。

运行结果:

执行时间: 148

可见使用了批处理,确实加快了执行多行sql语句的速度。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/98945.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!