使用集合对象构建结果集

时间:2009-02-02 05:58:12

标签: java collections jdbc resultset

我在使用java构建结果集时遇到了问题。这就是......

我正在存储一个集合对象,该集合对象从结果集对象中按行方式排列,并将集合对象(存储为向量/数组列表)放入缓存中并尝试检索相同的集合对象。 在这里,我需要使用集合对象再次构建结果集。现在我怀疑是否可能以这种方式构建结果集?请尽快告诉我。

提前致谢,

巴斯卡尔

5 个答案:

答案 0 :(得分:2)

如果您使用集合代替缓存,最好的办法是使用CachedRowSet而不是ResultSet。 CachedRowSet是ResultSet的子接口,但数据已经缓存。这比将所有数据写入ArrayList要简单得多 CachedRowSets也可以自己查询。

CachedRowSet rs;
.......................
.......................
Integer id;
String name;

while (rs.next())
{               
     if (rs.getInt("id") == 13)
     {
          id   = rs.getInt("id");
          name = rs.getString("name")); 
     }              
}

因此,只要您需要信息,就可以调用CachedRowSet。它几乎和切片面包一样好。 :)

修改
ResultSet没有set方法,而Update方法也有。使用Update方法重建ResultSet的问题是它需要选择要更新的行。 ResultSet释放后,所有行都设置为null。无法调用空引用。列表列表模仿ResultSet本身,或者更准确地说,模拟ResultSet的数组数组。

虽然向量是线程安全的,但它们附带了巨大的开销。请改用ArrayList。在创建每个嵌套List并将其放入外嵌套List时,以这种方式插入它。

nest.add(Collections.unmodifiableList(nested));

插入所有嵌套列表后,也将嵌套列表作为umodifiableList返回。这将为您提供一个线程安全的集合,而无需向量的开销。

答案 1 :(得分:1)

看看at this page。尝试查看SimpleResultSet类是否适合您的需求。

如果将its source组合成一组独立的类,它应该可以解决问题。

答案 2 :(得分:0)

从我能得到的,你的代码可能是这样的:

List collection = new ArrayList();
collection.add(" A collection in some order");

List cache = new ArrayList();
cache.add(collection); ...

现在当你检索时我认为你将按顺序获得你的收藏,因为你已经使用了List。

如果这不是您所期望的,请做出评论。

答案 3 :(得分:0)

我建议你使用CachedRowSet。请参阅本文的http://www.onjava.com/pub/a/onjava/2004/06/23/cachedrowset.html以了解有关CachedRowSet的更多信息。创建此CachedRowSet后,您可以断开与数据库的连接,对缓存的数据进行一些更改,甚至可以打开数据库连接并将更改提交回数据库。

答案 4 :(得分:0)

您应该考虑的另一个选择是重构您的代码以接受Collection而不是ResultSet。

我假设您将ResultSet传递给迭代它的方法。您也可以更改迭代ArrayList的方法...