我想编写一个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放入进行处理的东西。
有这样的动物吗?
由于
答案 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();
完成后,您可以将列表对象发送到任何您想要的位置,然后迭代它以获取数据。