首页 > 其他分享 >jdbc中的批处理

jdbc中的批处理

时间:2023-01-30 22:11:06浏览次数:31  
标签:语句 preStatement jdbc 批处理 sql 执行 public

本文主要讲述,面对多个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语句的速度。

标签:语句,preStatement,jdbc,批处理,sql,执行,public
From: https://www.cnblogs.com/zwgitOne123/p/17077379.html

相关文章

  • jdbc封装成工具类
    publicclassJDBCUtils{privatestaticConnectionconnection;static{try{Propertiesproperties=newProperties();......
  • day14-JdbcTemplate-01
    JdbcTemplate-01看一个实际需求:如果希望使用spring框架做项目,Spring框架如何处理对数据库的操作呢?方案一:使用之前的JdbcUtils类方案二:spring提供了一个操作数据库(......
  • jdbc中事务的处理
    /***模拟账户:Tom账户加钱+100,marry账户减钱-100*开启事务*/publicclassjdbcTransaction{publicstaticvoidmain(String[]args){//不使用......
  • JDBC之封装工具类(跨平台方案)
    JDBC之封装工具类(跨平台方案)把工具类的配置信息存储在配置文件中,需要修改用户信息时,改配置文件即可在src新建一个resouse配置文件,把工具类中的配置信息写入完善后......
  • JDBC之封装工具类(重用性方案)
    JDBC之封装工具类(重用性方案)实际JDBC使用过程中,存在大量重复代码,例如连接和数据库和关闭数据库我们需要把传统JDBC代码重构,抽取JDBC工具类,以后连接数据库,释放资源,都......
  • JAVA的JDBC基础
    JDBC概念JDBC就是使用Java语言操作关系型数据库的一套API全称:(JavaDataBaseConnectivity)Java数据库连接 JDBC好处各数据库厂商使用相同的接口,Java代码......
  • JDBC防止SQL注入
    JDBC防止SQL注入1.PreparedStatement的应用作用:1.预编译sql语句,效率高2.安全,防止sql注入3.可以动态的填充数据,执行多个同构的SQL语句 packagecom.qf.JDBC;......
  • JdbcTemplate的使用
    配置文件注入<beanid="jdbcTemplateIeCenter"class="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="XXDataSource"></property> <......
  • JDBC之Sql注入问题
    JDBC之Sql注入问题用户输入的数据包括sql关键字或者语法,导致sql查询时where后面的条件固定为truesql注入的语法1.用户名+‘+or1=1;#案例packagecom.qf.JDBC;​impo......
  • JDBC连接数据库
    jdbc(javadatabasecontectivity),即java连接数据库。jdbc的核心思想.java提供数据库的接口,数据库提供驱动实现类。jdbc是由多个接口和类进行功能实现  ......