【问题标题】:How do I iterate through the values of a row from a result set in java?如何从java中的结果集中遍历一行的值?
【发布时间】:2012-02-19 00:47:40
【问题描述】:

我所说的结果集: http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/ResultSet.html

我想做的是这个……

for row in rows
    for col in row
        //col is the name of the column, row[col] is the value.

我比 JSP 更精通 PHP,仅供参考。这将在 PHP 中完成,如下所示:

foreach($rs as $row)
    foreach($row as $col => $val)
        //val is the cell value, and column is the column name

编辑:我正在寻找一个通用的解决方案。注意 col 是一个变量,而不是文字。

【问题讨论】:

  • 虽然在 JSP 中读取结果集是完全可能的,但在 Java 中这不是正确的方法。此类事情应始终在单独的 Java 类中执行,其结果将仅在 JSP 中迭代。
  • 我很欣赏一般的建议。我可以向你保证,我稍后会处理这些细节......虽然老实说,我讨厌我用 java 编程的每一刻。
  • 没有提供的解决方案不包括隐含的陈述,“你必须学习新的东西”。如果您使用 java 检索结果集,则使用 java 循环遍历 resultSet,并创建一些在 PHP 中可使用的内容,例如行列表,其中每行都是列列表。
  • 你是对的,但我没有得到一个通用的答案,直到马哥给出了一个。我不害怕学习新东西,我只是更喜欢让事情尽可能简单,直到我的问题得到解决。现在是这样,我可以研究更简洁的代码问题,例如另一个人建议的标签。再次感谢您的回答。

标签: java sql jsp


【解决方案1】:

这只是the a_horse_with_no_name answer 的一个变体。 在这里,我们按照那里的建议使用List 对象中的List

final ResultSetMetaData meta = rs.getMetaData();
final int columnCount = meta.getColumnCount();
final List<List<String>> rowList = new LinkedList<List<String>>();
while (rs.next())
{
    final List<String> columnList = new LinkedList<String>();
    rowList.add(columnList);

    for (int column = 1; column <= columnCount; ++column) 
    {
        final Object value = rs.getObject(column);
        columnList.add(String.valueOf(value));
    }
}

// add the rowList to the request.

编辑为所有变量添加final。

【讨论】:

    【解决方案2】:
    ResultSetMetaData meta = rs.getMetaData();
    int colCount = meta.getColumnCount();
    while (rs.next())
    {
        for (int col=1; col <= colCount; col++) 
        {
            Object value = rs.getObject(col);
            if (value != null) 
            {
                System.out.print(value.toString());
            }
        }
    }
    

    但我不建议直接在 JSP 页面中执行此类操作。在后端建立某种价值持有者(例如列表列表)并对其进行迭代。

    【讨论】:

    • 感谢您的回答。我会听取您的建议并使用 DwB 的答案,因为我可以将其放入函数中。我希望我可以将您的两个答案都标记为答案,但是因为我无法接受我的感谢,并且感觉您是第一个回答我的问题的人;)。
    【解决方案3】:

    如果您使用Java Standard Tag Library,这很容易。

    也检查一下:

    http://docs.oracle.com/javaee/1.4/tutorial/doc/JSTL3.html

    我强烈建议您不要在 JSP 中嵌入 scriptlet 代码。这不是要走的路。

    如果你接受,那么这里给出的所有其他答案都必须被丢弃。它们都属于服务器端 Java 类,而不是 JSP。

    【讨论】:

    • 我很欣赏标签库的链接,但是在将行和列放入数组以与 foreach 标签一起使用之间是否仍然存在脱节?我不知道如何将结果集放入这样的数组中。
    • 哦,我没有注意到你提到的教程中提到了sql标签。酷的东西。尽管我非常感谢您的建议,但我认为使用 sql 标签的教程链接会比仅标签教程的链接提供更多信息。只是建设性的批评。我真的很感谢你的建议!
    • 批评?您的机器上没有安装 Google 吗?你没看到我给你的链接的第一页底部使用了 SQL 标记吗?源代码本身不是来自 Oracle 的“使用 JSTL”吗?我不认为你的批评是建设性的。如果可以的话,请在未来多努力一点。这不是勺子喂食场所。
    • 我为什么还要问这个问题?为什么有人打扰提问。只需用谷歌搜索您的问题并筛选 API 和文档,直到找到正确的并找到您要查找的内容。我做了一些谷歌搜索。这个链接会更相关:docs.oracle.com/javaee/1.4/tutorial/doc/JSTL7.html 同样,我没有侮辱你。我非常感谢您的建议,并且您以很好的方式提出了建议。我只是说你可以更直接。 IMO 建设性批评。
    • 下次告诉我你想喂多大的勺子。那是我发给你的链接,只有三页了。您也必须付出一些努力。
    【解决方案4】:

    请务必先通读The Tutorial

    while(rs.next()) {
        String col1 = rs.getString("NAME"); // if NAME is VARCHAR2, for eg.
    }
    

    虽然在 JSP 中读取结果集是完全可能的,但在 Java 中这不是正确的方法。此类事情应始终在单独的 Java 类中执行,其结果将仅在 JSP 中迭代。

    【讨论】:

    • 这个答案解决了这个问题,它要求一种通用的方法来处理列而不指定每列及其数据类型。
    猜你喜欢
    • 2011-11-30
    • 2020-07-12
    • 2012-06-05
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多