java - 遍历 ResultSet 并将其值添加到 ArrayList

标签 java jdbc resultset loops

我正在迭代 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 列。然后退出。 但我可以看到所有列的值。 为什么?

最佳答案

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

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

关于java - 遍历 ResultSet 并将其值添加到 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15517736/

相关文章:

java - 如何为 "BottomNavigationView"设置菜单图标图像,因为它仅显示图像的设计,即结构......?

java - MySQL 表中的奇怪位值

java - 如何在 JTextArea 中显示文件名(.txt)?

java - For循环不增加计数器

java - 根据它包含的长 "curTime"类字段将 N 的列表拆分为 24(小时)

java - 无法使用 for 循环更新多次

java - 无论如何要创建一个没有预身份验证的 Oracle 数据库连接池吗?

java - 如何使用Where子句查询显示从jtextfield到jtable的搜索查询从mysql表

perl - 从 Template Toolkit 中的结果集中访问额外的选定列

java - 从一个查询中的多个连接获取java ResultSet