R11*_*11G 23 java loops jdbc resultset
我正在迭代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"));
}
Run Code Online (Sandbox Code Playgroud)
ResultSet复制到的唯一值ArrayList是第1列.然后退出时.但我可以看到所有列的价值.为什么?
Sea*_*man 28
如果我已正确理解您的问题,这里有两个可能的问题:
resultset是null- 我认为这不可能就像你在你的while循环中得到一个异常一样,没有任何东西会输出resultset.getString(i++)从每个后续行获取列1,2,3等等 我认为第二点可能是你的问题.
假设您只返回了1行,如下所示
Col 1, Col 2, Col3
A , B, C
Run Code Online (Sandbox Code Playgroud)
你的代码只能得到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"));
}
Run Code Online (Sandbox Code Playgroud)
编辑:
要获得列数:
ResultSetMetaData metadata = resultset.getMetaData();
int numberOfColumns = metadata.getColumnCount();
Run Code Online (Sandbox Code Playgroud)
Luk*_*der 11
只是为了好玩,我提供使用的替代解决方案jOOQ和而不是使用jOOQ了Java 8,你可以使用JDBC映射任何其他API ResultSet来List,如春天JDBC或阿帕奇DbUtils,或者自己写ResultSetIterator:
List<Object> list =
DSL.using(connection)
.fetch("SELECT col1, col2, col3, ...")
.stream()
.flatMap(r -> Arrays.stream(r.intoArray()))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
List<Object> list =
DSL.using(connection)
.fetch("SELECT col1, col2, col3, ...")
.stream()
.flatMap(Record::intoStream)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
(免责声明,我为jOOQ背后的公司工作)
| 归档时间: |
|
| 查看次数: |
127505 次 |
| 最近记录: |