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

Java基础
浅谈Java语言接口与继承本质区别
java基础 -- JAVA字符集
JAVA基础知识精华总结
孙鑫老师原创:Servlet与Tomcat
java基础知识
Java程序开发中应用线程
JAVA基础之面向对象
关于Java IO流学习总结
如何用Java实现FTP服务器
Java抽象类和接口和继承之间关系
Java获取URL对应的资源
详解Java多线程开发中的数据同步
Java中跳出多层循环的简单方法
Java多线程程序设计初步入门
JavaScript(一)
JavaScript(二)
Java基础:JAVA SE基础部分(一)
Java基础:JAVA SE基础部分(二)
Java基础:Ruby将赶超Java吗?
java基础:小编浅谈java中的一些编程思想

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


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