RowSet 新特性简介
java 5在Java Database Connectivity (JDBC)方面加强了支持,其中加入了新的包javax.sql.rowset,javax.sql.rowset.serial,javax.sql.rowset.spi。从RowSet接口继续规定了五个新的接口:
1. CachedRowSet: CachedRowset可以不用与数据源建立长期的连接,只有当从数据库读取数据或是往数据库写入数据的时候才会与数据库建立连接,它提供了一种轻量级的访问数据库的方式,其数据均存在内存中。
2. JdbcRowSet:对ResultSet的对象进行包装,使得可以将ResultSet对象做为一个JavaBeans ™ 组件。
3. FilteredRowSet:继续自CachedRowSet,可以根据设置条件得到数据的子集。
4. JoinRowSet:继续自CachedRowSet,可以将多个RowSet对象进行SQL Join语句的合并。
5. WebRowSet:继续自CachedRowSet,可以将WebRowSet对象输出成xml格式。
下面分别演示如何使用这五个新接口。
实验环境IBM DB2 Universal 8.1
数据库名:DemoDB
数据库用户名:db2admin
数据库密码:passWord
CachedRowSetCachedRowSet可以通过调用populate(ResuletSet rs)来生成数据,一旦获得数据,CachedRowSet就可以断开与数据库的连接,直到往数据库写入数据的时候才需建立连接。
可以使用自己扩展的或是使用Reference Implement的实现类进行访问数据库。下面的代码演示了如何根据ResultSet建立一个CachedRowSet对象,在中断与数据库连接的情况下,读取数据,并做更新,最后再获取数据库连接,将更新落实到数据库中。
public static void testCachedRowSet(){
Connection conn = null;
try {
// 获得数据库连接
conn= DriverManager.getConnection(DB2URL, DB2USER, DB2PASSWORD);
Statement stmt = conn.createStatement();
// 查询数据库,获得表数据
ResultSet rs = stmt.executeQuery("select * from student");//$NON-NLS-1$
// 根据ResultSet对象生成CachedRowSet类型的对象
CachedRowSetImpl crs = new CachedRowSetImpl();
crs.populate(rs);
// 关闭ResultSet
rs.close();
// 关闭数据库的连接
conn.close();
// 在中断与数据库连接的情况下,对CachedRowSet进行操作
OperateOnRowSet(crs);
// 重新获取与数据库的连接
conn= DriverManager.getConnection(DB2URL, DB2USER, DB2PASSWORD);
// 将CachedRowSet的内容更新到数据库
crs.acceptChanges(conn);
// 关闭CachedRowSet
crs.close();
// 关闭数据库连接
conn.close();
} catch (InstantiationException e) {
System.out.PRintln("Andrew: InstantiationException!");//$NON-NLS-1$
} catch (IllegalaccessException e) {
System.out.println("Andrew: IllegalAccessException!");//$NON-NLS-1$
} catch (ClassNotFoundException e) {
System.out.println("Andrew: ClassNotFoundException!");//$NON-NLS-1$
}catch (SQLException e) {
System.out.println("Andrew: SQLException!");//$NON-NLS-1$
e.printStackTrace();
}
}