java - 如何将 JDBC ResultSet 检索为 ArrayList?

标签 java performance jdbc arraylist resultset

我正在执行查询以检索大量 ID(整数)。不是通过 ResultSet 迭代数百万次并将所有内容一个接一个地复制到 ArrayList,是否有某种方法可以简单地将所有内容检索为 ArrayList?

我知道 ResultSet 应该被迭代,因为底层实现可能是缓存内容,但在我的情况下,我只需要立即获得所有 ID。我知道我可以将 FetchSize 设置为一个很大的数字,但是我仍然必须一个一个地检索 ID。

澄清:我想这样做的原因是性能。分析表明,执行 ResultSet.next()、ResultSet.getInt() 和 ArrayList.add() 数百万次需要相当长的时间。我认为数据库(我使用的是用 Java 编写的 H2)可能在内存中某处有数组或列表,所以我正在寻找一种方法将它直接复制给我,而不是通过 ResultSet 迭代接口(interface).

最佳答案

使用 Apache DbUtils库,您可以轻松地将结果集作为 map 列表返回。

public List query(String query) {
    List result = null;
    try {
        QueryRunner qrun = new QueryRunner();
        result = (List) qrun.query(connection, query, new MapListHandler());
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return result;
}

关于java - 如何将 JDBC ResultSet 检索为 ArrayList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/642249/

相关文章:

TDD session 期间出现 java.lang.AssertionError

Java:XML 转换、文本节点中的换行符、中断缩进

java - Java portlet 可以嵌入到 ASP.NET 页面中吗?

c - 连接字符串和数字的最佳方式是什么 - 使用 C 的性能?

c# - 如何在创建用户控件时显示动画

java - 如何解决这个异常org.hibernate.exception.JDBCConnectionException

java - 对 TableView 中的列进行排序

c - C 中的 float_fast(类似于 stdint.h 中的 int_fast)

java - 在 Java 中使用 SQLite 需要什么?

java - EclipseLink:createNativeQuery 异常 - org.postgresql.util.PSQLException