[英]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 列。然后退出。 但我可以看到所有列的值。 为什么?
如果我正确理解了您的问题,这里可能存在两个问题:
resultset
是null
的 - 我认为这不可能是因为你会在你的 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 JDBC或Apache DbUtils ,或者编写自己的ResultSetIterator
:
List<Object> list =
DSL.using(connection)
.fetch("SELECT col1, col2, col3, ...")
.stream()
.flatMap(r -> Arrays.stream(r.intoArray()))
.collect(Collectors.toList());
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.