遍历ResultSet和在一个ArrayList增加其价值(Iterating over Resul

2019-07-22 02:21发布

我遍历一个ResultSet ,并试图在复制其值ArrayList 。 问题是,它遍历一次。 但使用resultset.getString("Col 1")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列。然后一边退出。 但我可以看到所有列的值。 为什么?

Answer 1:

如果我理解正确的话您的问题,这里有两个可能的问题:

  • resultsetnull -我认为这是不能的情况下,如果它是你会得到一个例外while循环,没有什么会是输出
  • 第二个问题是, resultset.getString(i++)将得到的列1,2,3等从每个后续的行

我认为,第二点可能是你的问题就在这里。

比方说,你只有1个返回行,如下

Col 1, Col 2, Col3 
A    ,     B,    C

您的代码,因为它代表将只能得到 - 它wouldnt得到的列的其余部分。

我建议你改变你的代码如下:

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();


Answer 2:

只是为了好玩,我提供使用的替代解决方案jOOQ和而不是使用jOOQ了Java 8,你可以使用任何其他API映射JDBC ResultSet ,以List ,如春天JDBC或阿帕奇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公司工作)



文章来源: Iterating over ResultSet and adding its value in an ArrayList