繁体   English   中英

遍历 ResultSet 并将其值添加到 ArrayList

[英]Iterating over ResultSet and adding its value in an ArrayList

我正在遍历ResultSet并尝试将其值复制到ArrayList中。 问题是它只遍历一次。 但是使用resultset.getString("Col 1") to resultset.getString('Col n")显示所有列的所有条目。下面是代码片段 -

ResultSet resultset = null;
ArrayList<String> arrayList = new ArrayList<String>(); 
int i = 1;
while (resultset.next()) {              
    arrayList.add(resultset.getString(i++));
    System.out.println(resultset.getString("Col 1"));
    System.out.println(resultset.getString("Col 2"));
    System.out.println(resultset.getString("Col n"));
}

ResultSet被复制到ArrayList的唯一值是第 1 列。然后退出。 但我可以看到所有列的值。 为什么?

如果我正确理解了您的问题,这里可能存在两个问题:

  • resultsetnull的 - 我认为这不可能是因为你会在你的 while 循环中得到一个异常并且什么都不会输出。
  • 第二个问题是resultset.getString(i++)将从每个后续行中获取列 1,2,3 等等。

我认为第二点可能是您的问题。

假设您只返回了 1 行,如下所示:

Col 1, Col 2, Col 3 
A    ,     B,     C

你的代码只会得到 A - 它不会得到其余的列。

我建议您更改代码如下:

ResultSet resultset = ...;
ArrayList<String> arrayList = new ArrayList<String>(); 
while (resultset.next()) {                      
    int i = 1;
    while(i <= numberOfColumns) {
        arrayList.add(resultset.getString(i++));
    }
    System.out.println(resultset.getString("Col 1"));
    System.out.println(resultset.getString("Col 2"));
    System.out.println(resultset.getString("Col 3"));                    
    System.out.println(resultset.getString("Col n"));
}

编辑:

要获取列数:

ResultSetMetaData metadata = resultset.getMetaData();
int numberOfColumns = metadata.getColumnCount();

只是为了好玩,我提供了一个使用jOOQ和 Java 8 的替代解决方案。除了使用 jOOQ,您可以使用将 JDBC ResultSet映射到List的任何其他 API,例如Spring JDBCApache DbUtils ,或者编写自己的ResultSetIterator

jOOQ 3.8 或更低

List<Object> list =
DSL.using(connection)
   .fetch("SELECT col1, col2, col3, ...")
   .stream()
   .flatMap(r -> Arrays.stream(r.intoArray()))
   .collect(Collectors.toList());

jOOQ 3.9

List<Object> list =
DSL.using(connection)
   .fetch("SELECT col1, col2, col3, ...")
   .stream()
   .flatMap(Record::intoStream)
   .collect(Collectors.toList());

(免责声明,我在 jOOQ 背后的公司工作)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM