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

Java基础
java基础:小编浅谈java对象
Java基础:孙鑫谈Java中文乱码问题产生原因分析(一)
Java基础:孙鑫谈Java中文乱码问题产生原因分析(二)
Java基础:小编谈JDBC
Java基础:小编详谈Java编码规则并不是老生常谈
Java基础:小编详谈AOP概念
Java基础:小编谈java多维数组
Java基础:小编谈Javascript之DOM的使用(25条)
Java基础:小编杂谈动态语言
Java基础:程序员之家七月份Java基础总结
Java基础:XHTML中css+div布局(经典8条)
Java基础:小编浅谈Spring基于三大模板的Web表示层技术
Java基础:浅谈多线程那点事
Javai基础:浅谈封装的那些事
Java基础:小编浅谈JavaScript中自定义函数那些事
Java基础:小编谈JavaScript中使用原型来创建对象
Java基础:CSS那些事
Java基础:小编对JavaScript的一些认识
Java基础:小编浅谈JavaScript与Java区别何在
Java基础:小编谈继承的语法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-12-26   浏览: 533 ::
收藏到网摘: 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个用户,那么性能就有影响,如果某个人写了一个脚本添加一万个用户,程序可能变得很糟糕。添加批处理功能就可以帮助提高性能,而且在后面的那种情况下代码的可读性也会更好。