java - 使用集合对象构建结果集

标签 java collections jdbc resultset

我在使用 Java 构建结果集时遇到问题。

我正在存储一个从结果集对象中按行组织的集合对象,并将集合对象(存储为 vector/数组列表)放入缓存中并尝试检索相同的集合对象。

这里我需要使用集合对象再次构建结果集。现在我的疑问是以这种方式构建结果集是否可行?

最佳答案

如果您使用集合代替缓存,最好的主意是使用 CachedRowSet而不是结果集。 CachedRowSet是ResultSet的子接口(interface),但是数据已经被缓存了。这比将所有数据写入 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。

虽然 vector 是线程安全的,但它们会带来巨大的开销。请改用 ArrayList。当每个嵌套列表被创建并放入外部嵌套列表时,以这种方式插入它。

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

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

关于java - 使用集合对象构建结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/502318/

相关文章:

java - 连接到数据库时 Class.forName ("oracle.jdbc.driver.OracleDriver"的实际用途是什么?

java - Android致命异常线程层次结构(请解释)

java - 增强型 for 循环因 NullPointerException 停止

java - 清除 Thread.interrupt() 标志的方法

java - 具有 "object expiration"的对象缓存数据结构

javascript - 如何使用Lodash根据一个键合并两个集合?

java - 在 geolite2 .mmdb 文件中按城市名称查询 (JAVA)

java - 是否有更好的方法来分区列表和批量处理以更改源列表

java - 在插入数据库之前尝试将 Arraylist<LatLng> 转换为字符串

java - 为什么要使用JSTL?当我们在JSP文件中使用带有连接字符串的数据库连接来获取servlet发送的数据时会有什么危害