0

我在使用 java 构建结果集时遇到了问题。来了……

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

提前致谢,

巴斯卡尔

4

5 回答 5

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 没有设置方法,而有更新方法。使用 Update 方法来重建 ResultSet 的问题在于它需要选择要更新的行。ResultSet 释放自身后,所有行都设置为空。不能调用空引用。List of Lists 模仿 ResultSet 本身,或者更准确地说,数组数组模仿 ResultSet。

尽管 Vector 是线程安全的,但它们会产生巨大的开销。请改用 ArrayList。在创建每个嵌套列表并将其放入外部嵌套列表时,以这种方式插入它。

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

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

于 2009-02-02T07:20:24.590 回答
1

看看这个页面。尝试查看 SimpleResultSet 类是否适合您的需求。

如果您将它的源代码组合成一组独立的类,它应该可以解决问题。

于 2009-02-02T12:08:29.813 回答
0

据我所知,您的代码可能是这样的:

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

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

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

如果这不是您所期望的,请发表评论。

于 2009-02-02T06:06:29.733 回答
0

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

于 2009-02-02T07:35:13.953 回答
0

您应该考虑的另一个选择是重构您的代码以接受集合而不是结果集。

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

于 2009-02-02T07:37:33.573 回答