我想写一个java函数,它接受SQL查询并返回一个ResultSet以便在别处处理。不能这样做,因为一旦连接关闭,ResultSet就会死掉。
我用谷歌搜索了一下,发现了一个看起来像是解药的VERY OLD (2004) OReilly article:CachedRowSet。您只需输入您的ResultSet,CachedRowSet将保存数据,让您关闭连接并使用返回的CachedRowSet在别处处理数据。
这篇文章引用了Sun的CachedRowSet实现,这些实现似乎无处可寻。
现代的javadoc(对于Java1.5和更高版本)似乎有相同名称的东西,"CachedRowSet",它不仅仅是ResultSet数据的持有者。这个"CachedRowSet“似乎完成了整个数据库处理,从获取连接到其他所有事情。
"CachedRowSet“是不是和以前那篇文章里说的一样?
我想要一些简单的东西,就像以前的文章一样。连接关闭后,要将ResultSet放入其中进行处理的内容。
有这样的动物吗?
谢谢
发布于 2012-06-23 00:41:44
CachedRowSet是一个标准的Java接口。Sun写了一个参考实现,和Sun/Oracle JDK contains it。如果您正在使用不同的JDK,则该实现或其他实现可能不可用,也可能不可用。
如果您已经有一个ResultSet,那么您可以使用populate方法从它填充一个CachedRowSet。
如果您有足够的前瞻性来使用Java7,那么您可以使用具有createCachedRowSet方法的RowSetFactory以一种可移植的方式获得CachedRowSet实例。您可以从RowSetProvider获取RowSetFactory (当然!)。
发布于 2012-04-27 05:58:50
javax.sql.rowset.CachedRowSet仅仅是一个接口。有一个Sun/Oracle专有实现,但它不受支持,因此使用起来有风险。
现在的大多数代码都遵循“转换为pojos”模型。
发布于 2012-06-22 23:15:54
如果您只想传输数据,而不需要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();完成后,您可以将该列表对象发送到您想要的任何位置,然后遍历它以获取数据。
https://stackoverflow.com/questions/10341785
复制相似问题