CachedRowSet的:可以把它仍然被用来举行的ResultSet数据?(CachedRowSe

2019-09-16 19:17发布

我想编写一个Java函数,它在一个SQL查询并返回一个结果在其他地方处理。 这不能做的ResultSet是死的,一旦连接被关闭。

周围的Googling我发现了一个很老的(2004)奥赖利文章说有东西,看上去像治愈:CachedRowSet的。 你只需拖放在您的ResultSet时,CachedRowSet保存数据,让你关闭连接并播放与数据的其他地方使用返回CachedRowSet的。

被发现CachedRowSet的文章引用实现由Sun,这似乎是行不通的。

现代的javadoc(用于Java 1.5及以上)似乎有同名的东西,“CachedRowSet的”,这不仅仅是一个结果数据的保持者。 那“的CachedRowSet”似乎从得到的连接和其他一切做整个数据库的处理。

是“CachedRowSet的”同样的事情,在旧文章谈到了?

我想简单的东西,比如在老的文章。 该连接错误关闭后的东西扑通的ResultSet成处理。

有没有这样的动物是什么?

谢谢

Answer 1:

CachedRowSet的是一个标准的Java接口。 孙写了一个参考实现,以及太阳/ Oracle的JDK包含它 。 如果您使用的是不同的JDK,或另一实现可能或可能无法使用。

如果你已经有了一个ResultSet ,那么你可以填写一个CachedRowSet使用从它populate方法。

如果你是有远见的,足以使用Java 7的,那么你就可以得到CachedRowSet在便携方式例如,使用一个RowSetFactory ,其中有一个createCachedRowSet方法。 你可以得到一个RowSetFactoryRowSetProvider (当然!)。



Answer 2:

javax.sql.rowset.CachedRowSet仅仅是一个接口。 有一个太阳/ Oracle的专有实现,但它是不支持的,因而冒险使用。

大多数代码,这些天遵循“转换成的POJO”的模式。



Answer 3:

如果你只是想而不需要所有的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();

当你做,你可以发送列表对象任何你想要的,然后遍历它来获取数据。



文章来源: CachedRowSet: can it still be used to hold ResultSet data?