迭代ResultSet并在ArrayList中添加其值
我正在遍历ResultSet
并尝试将其值复制到ArrayList
。 问题是它的遍历只有一次。 但是使用resultset.getString("Col 1")
到resultset.getString('Col n")
显示所有列的所有条目。下面是代码片段 –
ResultSet resultset = null; ArrayList arrayList = new ArrayList(); 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循环中得到一个exception一样,没有输出 - 第二个问题是
resultset.getString(i++)
将从每个后续行获取列1,2,3等等
我认为第二点可能是你的问题。
假设您只返回了1行,如下所示
Col 1, Col 2, Col3 A , B, C
你的代码只能得到A – 它不会得到其余的列。
我建议您更改代码如下:
ResultSet resultset = ...; ArrayList arrayList = new ArrayList (); 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的替代解决方案。您可以使用任何其他将JDBC ResultSet
映射到List
API,例如Spring JDBC或Apache DbUtils ,或者编写自己的ResultSetIterator
,而不是使用jOOQ。 :
jOOQ 3.8或更低
List
jOOQ 3.9
List
(免责声明,我为jOOQ背后的公司工作)