[转]使用JDBC进行批处理

http://mousepc.iteye.com/blog/1131462

•业务场景:当需要向数据库发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率。

一、
•实现批处理有两种方式,第一种方式:
•Statement.addBatch(sql)
•执行批处理SQL语句
•executeBatch()方法:执行批处理命令
•clearBatch()方法:清除批处理命令

  Connection conn = null;
  Statement st = null;
  ResultSet rs = null;
  try {
    conn = JdbcUtil.getConnection();
    String sql1 = "insert into user(name,password,email,birthday)
      values(‘kkk‘,‘123‘,‘[email protected]‘,‘1978-08-08‘)";
    String sql2 = "update user set password=‘123456‘ where id=3";
    st = conn.createStatement();
    st.addBatch(sql1); //把SQL语句加入到批命令中
    st.addBatch(sql2); //把SQL语句加入到批命令中
    st.executeBatch();
  } finally{
    JdbcUtil.free(conn, st, rs);
  }

•采用Statement.addBatch(sql)方式实现批处理:

•优点:可以向数据库发送多条不同的SQL语句。

•缺点:

  •SQL语句没有预编译。

  •当向数据库发送多条语句相同,但仅参数不同的SQL语句时,需重复写上很多条SQL语句。例如:

  Insert into user(name,password) values(‘aa’,’111’);
  Insert into user(name,password) values(‘bb’,’222’);
  Insert into user(name,password) values(‘cc’,’333’);
  Insert into user(name,password) values(‘dd’,’444’);

二、

•实现批处理的第二种方式:

•PreparedStatement.addBatch()

  conn = JdbcUtil.getConnection();
  String sql = "insert into user(name,password,email,birthday) values(?,?,?,?)";
  st = conn.prepareStatement(sql);
  for(int i=0;i<50000;i++){
    st.setString(1, "aaa" + i);
    st.setString(2, "123" + i);
    st.setString(3, "aaa" + i + "@sina.com");
    st.setDate(4,new Date(1980, 10, 10));
    st.addBatch();
    if(i%1000==0){
      st.executeBatch();
      st.clearBatch();
    }
  }
  st.executeBatch();

•采用PreparedStatement.addBatch()实现批处理

•优点:发送的是预编译后的SQL语句,执行效率高。

•缺点:只能应用在SQL语句相同,但参数不同的批处理中。因此此种形式的批处理经常用于在同一个表中批量插入数据,或批量更新表的数据。

时间: 2024-10-20 17:07:01

[转]使用JDBC进行批处理的相关文章

javaweb学习总结(三十六)——使用JDBC进行批处理

在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和preparedstatement 一.使用Statement完成批处理 1.使用Statement对象添加要批量执行SQL语句,如下: 1 Statement.addBatch(sql1); 2 Statement.addBatch(sql2); 3 Statement.addBatch(sql3);

使用JDBC进行批处理

在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式: statement 和 preparedstatement 一.使用Statement完成批处理 1.使用Statement对象添加要批量执行SQL语句,如下: Statement.addBatch(sql1); Statement.addBatch(sql2); Statement.addBatch(sql3); 2.

JDBC batch批处理Statement executeBatch 具体解释

JDBC提供了数据库batch处理的能力,在数据大批量操作(新增.删除等)的情况下能够大幅度提升系统的性能.我曾经接触的一个项目,在没有採用batch处理时,删除5万条数据大概要半个小时左右,后来对系统进行改造,採用了batch处理的方式,删除5万条数据基本上不会超过1分钟.看一段JDBC代码: // 关闭自己主动运行 con.setAutoCommit(false); Statement stmt = con.createStatement(); stmt.addBatch("INSERT I

深入分析JavaWeb Item30 -- 使用JDBC进行批处理

在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和preparedstatement 一.使用Statement完成批处理 1.使用Statement对象添加要批量执行SQL语句,如下: Statement.addBatch(sql1); Statement.addBatch(sql2); Statement.addBatch(sql3); 2.执行批

JDBC的批处理操作三种方式

SQL批处理是JDBC性能优化的重要武器,经本人研究总结,批处理的用法有三种. package lavasoft.jdbctest; import lavasoft.common.DBToolkit; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; /** * JDBC的批量操作三种方式 * * @auth

JavaWeb学习总结(十一)--JDBC之批处理

一.批处理的介绍 在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率.批处理只针对更新(增.删.改)语句,批处理没有查询什么事儿! JDBC实现批处理有两种方式:statement和preparedstatement 可以多次调用Statement类的addBatch(String sql)方法,把需要执行的所有SQL语句添加到一个"批"中,然后调用Statement类的executeBatch

[javaSE] JDBC的批处理

向数据库发送多条sql语句 create database batch use batch create table batch_table( id int primary key auto_increment, name varchar(20) ) insert into batch_table values(null,”aaa”) insert into batch_table values(null,”bbb”) insert into batch_table values(null,”c

hibernate4使用原生jdbc进行批处理

在hibernate中,有一级缓存session和二级缓存sessionFactory这些机制,一方面为编码提供了便利,同时也会有一些副作用.比如有较大的数据量交互的话,缓存反而会降低效率.最近在做一个有关批量更新的程序,在调用session.update()之后,对象会保存在缓存中,如果数据量超过缓存的容量就会出错.解决方法是:在hibernate中调用jdbc批量处理的API,使用原生的jdbc来进行批量操作. 但是这里又出现了新的问题,在hibernate4中,通过session是不能直接

JDBC数据批处理

JDBC(Java Data Base Connectivity):SUN公司为统一对数据库的操作定义的一套Java操作规范(接口),成为JDBC: API中组成JDBC的两个包:java.sql  |  javax.sql JDBC过程(以MySQL.Oracle数据库为例) mysql数据库默认端口:3306oracle数据库默认端口:1521 services.msc:查看系统中所有的服务 mysql数据库中最重要的配置文件C:\Program Files (x86)\MySQL\MySQ