JDBC中Rowset和ResultSet的区别

来源:互联网 发布:网络一线牵老年表情 编辑:程序博客网 时间:2024/06/05 18:18
package com.ufgov.test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.sql.RowSet;import com.sun.rowset.CachedRowSetImpl;@SuppressWarnings("restriction")public class DBConnection {      public static RowSet query(Connection con, String sql) throws SQLException {          // 使用sun的默认RowSet实现          CachedRowSetImpl rowset = new CachedRowSetImpl();          // 查询没有任何变化          Statement stat = con.createStatement();          ResultSet rs = stat.executeQuery(sql);          // 这里就是填充离线集          rowset.populate(rs);          // 都可以关闭了,爽吧          rs.close();          stat.close();          return rowset;      }      /**      * @param args      * @throws ClassNotFoundException      * @throws SQLException      */      public static void main(String[] args) throws ClassNotFoundException,              SQLException {          Class.forName("oracle.jdbc.driver.OracleDriver");          String conUrl = "jdbc:oracle:thin:@localhost:1521:orcl";          String name = "yycms";        String psw = "1";        Connection con = DriverManager.getConnection(conUrl,name,psw);          RowSet rs = query(con, "select * from donation_order_detail t where t.ddbh like '%67348'");          // 关闭连接也没有关系了。          con.close();          // 和ResultSet使用一样          while (rs.next()) {              System.out.print(rs.getString(1) + ";");              System.out.println(rs.getString("address"));          }      }      // 其实RowSet还可以完成分页的功能。请看下面的方法      public static RowSet query(Connection con, String sql, int pageSize,              int pageNumber) throws Exception {          CachedRowSetImpl rowset = new CachedRowSetImpl();          // 要是可以滚动的结果集          Statement stat = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,                  ResultSet.CONCUR_READ_ONLY);          ResultSet rs = stat.executeQuery(sql);          // 设定分页大小          rowset.setPageSize(pageSize);          // 计算一下开始游标位置          int skip = (pageNumber - 1) * pageSize + 1;          // 可以填充了          rowset.populate(rs, skip);          rs.close();          stat.close();          return rowset;      }  }  


ResultSet是在线的数据集,在读取数据的过程中不能断开数据库联接,只有读取数据完成后才能close掉相关对象。

RowSet离线的数据集,而且sun在jdk里面提供一个默认的实现,而且象oracle这样比较大型的数据库驱动里面也提供自己的RowSet实现。

原创粉丝点击