JDBC--批量处理

1、当需要成批插入或者更新记录时,可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理,这样可以提高处理速度。

2、JDBC的批量处理语句包括两个方法:

--1)addBatch(String):添加需要批量处理的sql语句或参数;

--2)executeBatch();执行批量处理语句;

3、通常遇到以下两种情况时需要批量执行sql语句:

--1)多条sql语句的批量处理:

--2)一个sql语句的批量传参。

4、实例

public void testBatch(){
    Connection conn = null;
    PreparedStatement ps = null;
    String sql = "INSERT INTO customers values(?, ?, ?)";
    try{
        conn = JDBCUtils.getConnection();
        JDBCUtils.startTransaction(conn);

        ps = conn.prepareStatement(sql);
        Date date = new Date(new java.util.Date().getTime());
        long start = System.currentTimeMillis();
        for(int i = 0; i < 100000; i++){
            ps.setInt(1, i + 1);
            ps.setString(2, "name_" + i);
            ps.setDate(3, date);

            ps.addBatch();

            if((i + 1) % 300 == 0){
                ps.executeBatch();
                ps.clearBatch();
            }
        }
        ps.executeBatch();
        ps.clearBatch();
        long end = System.currentTimeMillis();
        System.out.println("Time: " + (end - start));

        JDBCUtils.commit(conn);

    }catch(Exception e){
        e.printStackTrace();
        JDBCUtils.rollback(conn);
    }finally{
        JDBCUtils.release(conn, ps, null);
    }
}
时间: 2024-12-27 21:46:43

JDBC--批量处理的相关文章

jdbc批量插入实现大批量数据快速插入

今天在做一个将excel数据导入数据库的程序时,由于数据量大,准备采用jdbc的批量插入.于是用了preparedStatement.addBatch();当加入1w条数据时,再执行插入操作,preparedStatement.executeBatch().我原以为这样会很快,结果插入65536条数据一共花30多分钟,完全出乎我的意料.于是问了一下同事,他们在处理这种大批量数据导入的时候是如何处理的,发现他们也是用的jdbc批量插入处理,但与我不同是:他们使用了con.setAutoCommit

JAVA 使用原生jdbc批量添加,表被锁住问题

今天用jdbc批量添加数据的时候遇到了一个问题,当数据添加成功过后,再想对该表进行操作发现表被锁住了,检查了下代码发现事务提交了呀!!!!!!!!!!!! 去网上查了大半天的资料才发现问题,在connection  commit过后需要加上 connection.setAutoCommit(true); 下面是示例代码 log.info("插入语句" + sql); //获取结果集 connection = JdbcUtils.getConnection(database.getMys

JDBC: 批量处理提高SQL处理速度

   当需要成批插入或者更新记录时.可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理.通常情况下比单独提交处理更有效率 JDBC的批量处理语句包括下面两个方法: addBatch(String):添加需要批量处理的SQL语句或是参数: executeBatch():执行批量处理语句: 通常我们会遇到两种批量执行SQL语句的情况: 多条SQL语句的批量处理: 一个SQL语句的批量传参: 测试代码: import java.sql.Connection; import

使用JDBC批量保存数据(JdbcDaoSupport,JdbcTemplete)

最近做的一个项目中用到了Hibernate的,然后数据库批量插入数据的时候就使用到了hibernate的批处理,但是效率比较低,看网上说还有一些限制,要禁止二级缓存,还要多一个batch_size的配置什么的,不知道是用的不对还是怎么滴,插入一万条数据最快的时候也需要三十多秒时间,慢的五十多秒,比较纠结,然后改用了jdbc的批处理,这里有三张表,Device,Alarm和SyslogAlarm,不过device表可以忽略,用处不大,就是和Alarm有个一对多的关系,Alarm和SyslogAla

JDBC批量插入不生效

&rewriteBatchedStatements=true 只有把rewriteBatchedStatements参数置为true, JDBC驱动才会帮你批量执行SQL

Mybatis批量操作与JDBC批量操作效率测试

Mybatis-spring配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springfr

JDBC批量运行executeBatch

JDBC运行SQL语句,有两个处理的接口,一个PreparedStatement,Statement,一般操作JDBC比較用得多的还是PreparedStatement 只是在运行批量,PreparedStatement有点不够Statement ps = conn.prepareStatement(sql); for(int i = 0;i<10;i++){ ps.setString(1,"1"); //PreparedStatement批处理方式一 ps.addBatch()

JDBC批量操作性能提升

JDBC 当使用INSERT INTO....VALUES()语句批量插入的时候,应该使用JDBC的PreparedStatement的批量操作方法,而不是采用一条一条执行的方法. 例如(来源:http://superjavason.iteye.com/blog/255423): 如上图,代码有3个关键的处理步骤: 1)关闭自动提交 2)addBatch 3)executeBatch 使用这种方法,SQLite测试时的效果提升非常明显,从 10000/s提升到100000/s(数据仅做参考,不能

JDBC批量处理

批量处理允许将相关的SQL语句分组到批处理中,并通过对数据库的一次调用来提交它们,一次执行完成与数据库之间的交互. 一次向数据库发送多个SQL语句时,可以减少通信开销,从而提高性能. 不需要JDBC驱动程序来支持此功能.应该使用DatabaseMetaData.supportsBatchUpdates()方法来确定目标数据库是否支持批量更新处理.如果JDBC驱动程序支持此功能,该方法将返回true. Statement,PreparedStatement和CallableStatement的ad

JDBC批量插入数据优化,使用addBatch和executeBatch

>>.在之前的玩转JDBC打造数据库操作万能工具类JDBCUtil,加入了高效的数据库连接池,利用了参数绑定有效防止SQL注入中其实忽略了一点,那就是SQL的批量插入的问题,如果来个for循环,执行上万次,肯定会很慢,那么,如何去优化呢? https://www.awaimai.com/841.html 一.用 preparedStatement.addBatch()配合preparedStatement.executeBatch()去批量插入 1 /** 2 * 执行数据库插入操作 4 *