我在使用java构建结果集时遇到了问题。这就是......
我正在存储一个集合对象,该集合对象从结果集对象中按行方式排列,并将集合对象(存储为向量/数组列表)放入缓存中并尝试检索相同的集合对象。 在这里,我需要使用集合对象再次构建结果集。现在我怀疑是否可能以这种方式构建结果集?请尽快告诉我。
提前致谢,
巴斯卡尔
答案 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的方法...