当前位置: 首页 > 图文教程 > Java技术 > Java基础 > 批量处理JDBC语句提高处理速度

Java基础
Java串行端口技术协议
Java 1.5中面向方面(AOP)编程
实现基于Aspectwerkz的AOP开发
EJB 3.0开发指南之消息驱动Bean
Java堆的管理--垃圾回收
EJB 3.0开发指南之依赖注入
EJB3.0开发指南之有状态会话Bean
EJB3.0开发指南之无状态会话Bean
基于Java的企业分布式应用
J2SE5.0新特性之ProcessBuilder
J2SE5.0新特性之使用代理服务器
Java数据对象技术JDO
Java中ThreadLocal的设计与使用
Hibernate下数据批量处理
Java程序设计中的接口应用
Java中利用JMF编写摄像头拍照程序
性能、规模、风险 初评hibernate
Struts+Hibernate中解决汉字编码
Spring Framework标记库初学指南
基于Java的IDEA加密算法

Java基础 中的 批量处理JDBC语句提高处理速度


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-12-26   浏览: 535 ::
收藏到网摘: n/a

有时候JDBC运行得不够快,这可以使用数据库相关的存储过程。当然,作为存储过程的一个替代方案,可以试试使用Statement 的批量处理特性以提高速度。

 

 

 

  存储过程的最简单的形式就是包含一系列SQL语句的过程,将这些语句放在一起便于在同一个地方管理也可以提高速度。Statement 类可以包含一系列SQL语句,因此允许在同一个数据库事务执行所有的那些语句而不是执行对数据库的一系列调用。

  使用批量处理功能涉及下面的两个方法:

  addBatch(String) 方法

  executeBatch方法

  如果你正在使用Statement 那么addBatch 方法可以接受一个通常的SQL语句,或者如果你在使用PreparedStatement ,那么也可以什么都不向它增加。

executeBatch 方法执行那些SQL语句并返回一个int值的数组,这个数组包含每个语句影响的数据的行数。

注意:如果将一个SELECT语句或者其他返回一个ResultSetSQL语句放入批量处理中就会导致一个SQLException异常。

  关于java.sql.Statement 的简单范例可以是:

      con = DriverManager.getConnection(url,"myLogin", "myPassword");

       con.setAutoCommit(false);

       stmt = con.createStatement(); 

       stmt.addBatch("INSERT INTO student " + "VALUES(4,'Yang',20,True)");

       stmt.addBatch("INSERT INTO student " + "VALUES(5,'li',20,True)");

       stmt.addBatch("INSERT INTO student " + "VALUES(6,'zhang',20,True)");

       stmt.addBatch("INSERT INTO student " + "VALUES(7,'wang',20,True)");

       stmt.addBatch("INSERT INTO student " + "VALUES(8,'liu',20,True)");

 

       int [] updateCounts = stmt.executeBatch();

       con.commit();

       con.setAutoCommit(true);

 

 PreparedStatement 有些不同,它只能处理一部分SQL语法,但是可以有很多参数,因此重写上面的范例的一部分就可以得到下面的结果:

 // 注意这里没有删除语句

  PreparedStatement stmt = conn.prepareStatement(

  "INSERT INTO student VALUES(?,?,?,?)"

  );

  User[ ] users = ...;

  for(int i=0; i< i++)>

  stmt.setInt(1, users[i].getID());

  stmt.setString(2, users[i].getName());

  stmt.setInt(3, users[i].getAge());

  stmt.setBoolean(4, users[i].getSex());

  stmt.addBatch( );

  }

  int[ ] counts = stmt.executeBatch();

如果你不知道你的语句要运行多少次,那么这是一个很好的处理SQL代码的方法。在不使用批量处理的情况下,如果添加50个用户,那么性能就有影响,如果某个人写了一个脚本添加一万个用户,程序可能变得很糟糕。添加批处理功能就可以帮助提高性能,而且在后面的那种情况下代码的可读性也会更好。