我想编写一个Java函数,它在一个SQL查询并返回一个结果在其他地方处理。 这不能做的ResultSet是死的,一旦连接被关闭。
周围的Googling我发现了一个很老的(2004)奥赖利文章说有东西,看上去像治愈:CachedRowSet的。 你只需拖放在您的ResultSet时,CachedRowSet保存数据,让你关闭连接并播放与数据的其他地方使用返回CachedRowSet的。
被发现CachedRowSet的文章引用实现由Sun,这似乎是行不通的。
现代的javadoc(用于Java 1.5及以上)似乎有同名的东西,“CachedRowSet的”,这不仅仅是一个结果数据的保持者。 那“的CachedRowSet”似乎从得到的连接和其他一切做整个数据库的处理。
是“CachedRowSet的”同样的事情,在旧文章谈到了?
我想简单的东西,比如在老的文章。 该连接错误关闭后的东西扑通的ResultSet成处理。
有没有这样的动物是什么?
谢谢
CachedRowSet的是一个标准的Java接口。 孙写了一个参考实现,以及太阳/ Oracle的JDK包含它 。 如果您使用的是不同的JDK,或另一实现可能或可能无法使用。
如果你已经有了一个ResultSet
,那么你可以填写一个CachedRowSet
使用从它populate
方法。
如果你是有远见的,足以使用Java 7的,那么你就可以得到CachedRowSet
在便携方式例如,使用一个RowSetFactory
,其中有一个createCachedRowSet
方法。 你可以得到一个RowSetFactory
从RowSetProvider
(当然!)。
javax.sql.rowset.CachedRowSet
仅仅是一个接口。 有一个太阳/ Oracle的专有实现,但它是不支持的,因而冒险使用。
大多数代码,这些天遵循“转换成的POJO”的模式。
如果你只是想而不需要所有的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();
当你做,你可以发送列表对象任何你想要的,然后遍历它来获取数据。