`
yiyun_8
  • 浏览: 2079 次
  • 来自: ...
社区版块
存档分类
最新评论

JDBC可滚动可更新感知更新结果集

阅读更多
产生Statement对象最复杂的方法就是下面这个方法了:

  二、详解构建Statement对象的方法参数

  此方法来自于Connection接口:

  Statement createStatement(int resultSetType,

  int resultSetConcurrency,

  int resultSetHoldability)

  throws SQLException创建一个 Statement 对象,该对象将生成具有给定类型、并发性和可保存性的 ResultSet 对象。此方法与上述 createStatement 方法相同,但它允许重写默认结果集类型、并发性和可保存性。

  参数:

  resultSetType - 以下 ResultSet 常量之一:ResultSet.TYPE_FORWARD_ONLY、ResultSet.TYPE_SCROLL_INSENSITIVE 或 ResultSet.TYPE_SCROLL_SENSITIVE

  resultSetConcurrency - 以下 ResultSet 常量之一:ResultSet.CONCUR_READ_ONLY 或 ResultSet.CONCUR_UPDATABLE

  resultSetHoldability - 以下 ResultSet 常量之一:ResultSet.HOLD_CURSORS_OVER_COMMIT 或 ResultSet.CLOSE_CURSORS_AT_COMMIT

  返回:

  一个新的 Statement 对象,该对象将生成具有给定类型、并发性和可保存性的 ResultSet 对象

  上面方法参数有三个,形成三组:

  1、结果集类型:设置是否滚动,以及设置滚动结果集是否感知数据的更新。

  ResultSet.TYPE_FORWARD_ONLY:只能向前

  ResultSet.TYPE_SCROLL_INSENSITIVE :可滚动,不感知数据变化。

  ResultSet.TYPE_SCROLL_SENSITIVE 可滚动,并感知数据变化。

  2、并发性:设置是否允许更新。

  ResultSet.CONCUR_READ_ONLY:只读

  ResultSet.CONCUR_UPDATABLE :可更新

  3、可保存性:设置提交时候是否关闭结果集。

  ResultSet.HOLD_CURSORS_OVER_COMMIT :在提交后结果集还可用ResultSet.CLOSE_CURSORS_AT_COMMIT:在提交时候关闭结果集

  由于这些特性比较高级,不同数据库驱动对此实现也不一样。因此在使用JDBC高级特性的时候最好做个测试,以保证程序的可靠性。
=============================================================================
JDBC的结果集有很多类型。这些结果集有不同的特性,以满足各种需要。这在高性能的JDBC数据操作中有着重要应用。下面是一个应用实例:
一、测试代码

  package lavasoft.common;

  import java.sql.Connection;

  import java.sql.ResultSet;

  import java.sql.SQLException;

  import java.sql.Statement;

  /**

  * JDBC可滚动可更新感知更新结果集测试

  *

  * @author leizhimin 2009-12-8 20:09:03

  */

  public class TestResultSet {

  public static void main(String[] args) {

  testScrollResultSet();

  testUpdateResultSet();

  }

  /**

  * 可更新结果集更新测试

  */

  public static void testUpdateResultSet() {

  Connection conn = DBToolkit.getConnection();

  String sql = "SELECT * FROM book";

  try {

  Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

  ResultSet rs = stmt.executeQuery(sql);

  System.out.println("---------原结果集--------");

  while (rs.next()) {

  System.out.println("[行号:" + rs.getRow() + "]\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3));

  }

  System.out.println("---------插入一条记录--------");

  rs.first();

  //将光标移动到插入行上

  rs.moveToInsertRow();

  //构建行数据

  rs.updateString(2, "xxxx");

  rs.updateString(3, "x");

  //插入一行

  rs.insertRow();

  System.out.println("-------------更新一条记录-------------");

  rs.absolute(3);

  //构建行数据

  rs.updateString(2, "uuuu");

  rs.updateString(3, "u");

  rs.updateRow();

  System.out.println("---------插入更新后的结果集--------");

  rs = stmt.executeQuery(sql);

  while (rs.next()) {

  System.out.println("[行号:" + rs.getRow() + "]\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3));

  }

  rs.close();

  stmt.close();

  } catch (SQLException e) {

  e.printStackTrace();

  } finally {

  DBToolkit.closeConnection(conn);

  }

  }

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics