我在使用 java 构建结果集时遇到了问题。来了……
我正在存储一个集合对象,该对象从结果集对象中按行组织,并将集合对象(存储为向量/数组列表)放入缓存中,并尝试检索相同的集合对象。在这里,我需要使用集合对象再次构建结果集。现在我怀疑是否可能以这种方式构建结果集?请尽快让我知道。
提前致谢,
巴斯卡尔
我在使用 java 构建结果集时遇到了问题。来了……
我正在存储一个集合对象,该对象从结果集对象中按行组织,并将集合对象(存储为向量/数组列表)放入缓存中,并尝试检索相同的集合对象。在这里,我需要使用集合对象再次构建结果集。现在我怀疑是否可能以这种方式构建结果集?请尽快让我知道。
提前致谢,
巴斯卡尔
如果您使用集合代替缓存,最好的办法是使用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。这将为您提供一个线程安全的集合,而不会产生向量的开销。
据我所知,您的代码可能是这样的:
List collection = new ArrayList();
collection.add(" A collection in some order");
List cache = new ArrayList();
cache.add(collection); ...
现在,当您检索时,我认为您会按顺序获得您的收藏,因为您使用了 List。
如果这不是您所期望的,请发表评论。
我会建议你使用 CachedRowSet。有关 CachedRowSet 的更多信息,请参阅http://www.onjava.com/pub/a/onjava/2004/06/23/cachedrowset.html这篇文章。创建此 CachedRowSet 后,您可以断开与数据库的连接,对缓存的数据进行一些更改,甚至可以打开数据库连接并将更改提交回数据库。
您应该考虑的另一个选择是重构您的代码以接受集合而不是结果集。
我假设您将该 ResultSet 传递给迭代它的方法。您不妨更改方法以迭代 ArrayList ...