CachedRowSet:它仍可用于保存ResultSet数据吗?

时间:2012-04-26 21:37:30

标签: java resultset cachedrowset

我想编写一个java函数,它接受一个SQL查询并返回一个ResultSet以便在别处进行处理。一旦连接关闭,ResultSet就会死亡,这是无法完成的。

在Google上搜索我找到了一个VERY OLD (2004) OReilly article,它看起来像是治愈了:CachedRowSet。您只需放入ResultSet,CachedRowSet保存数据,让您关闭连接并使用返回的CachedRowSet在其他地方播放数据。

本文引用了Sun的CachedRowSet实现,似乎无处可寻。

现代javadocs(适用于Java 1.5及更高版本)似乎有一些同名的东西,#34; CachedRowSet",它不仅仅是ResultSet数据的持有者。那" CachedRowSet"似乎从获取连接和其他一切来完成整个数据库处理。

那是" CachedRowSet"与旧文章中谈到的相同?

我想要一些简单的东西,比如旧文章。在连接关闭后将ResultSet放入进行处理的东西。

有这样的动物吗?

由于

3 个答案:

答案 0 :(得分:5)

CachedRowSet是标准的Java接口。 Sun写了一个参考实现,Sun/Oracle JDK contains it。如果您使用的是其他JDK,那么该实现可能会也可能不会实现。

如果您已有ResultSet,则可以使用populate方法填写CachedRowSet

如果您正在考虑使用Java 7,那么您可以使用具有RowSetFactory方法的createCachedRowSet以便携方式获取CachedRowSet实例。您可以从RowSetProvider获得RowSetFactory(当然!)。

答案 1 :(得分:-1)

javax.sql.rowset.CachedRowSet仅仅是一个界面。有一个Sun / Oracle专有实现,但它不受支持,因此使用起来很危险。

这些天的大多数代码遵循“转换为pojos”模型。

答案 2 :(得分:-1)

如果您只想传输数据而不需要CachedRowSet提供的所有函数,那么最好只将结果集数据放入列表列表中。

   List<Object> list = new ArrayList<Object>();
   ResultSet rs = stmt.executeQuery("select * from myTable");
   while(rs.next()) {
         List<Object> row = new ArrayList<Object>();
         row.add(rs.getObject(1));
         row.add(rs.getObject(2));
         row.add(rs.getObject(3));
         //And so on, or you can use the ResultSetMetaData to determine the number of columns
         list.add(row);
   }
   rs.close();

完成后,您可以将列表对象发送到任何您想要的位置,然后迭代它以获取数据。