【问题标题】:Java resultset max column?Java结果集最大列?
【发布时间】:2012-02-16 11:52:09
【问题描述】:

我对 Java 还很陌生,我想知道如何获取通过 MySQL 查询返回的所有列。例如,

SELECT * FROM `login`

然后我有这个代码来返回结果:

        while (rs.next()) {
            for (byte i = 1; i < 10; i++) {
                result = result+" "+rs.getString(i);
            }
        }

由于动态 MySQL 查询,我希望 for 循环中的最大列数为 10。有没有一种简单的方法可以做到这一点?谢谢。

【问题讨论】:

    标签: java mysql jdbc resultset


    【解决方案1】:

    尽管正如 duffymo 建议的那样,最好拼出您希望在查询中接收的列,但您可以使用 ResultSet 元数据来获取返回的列数:

     ResultSetMetaData rsmd = rs.getMetaData();
     int numberOfColumns =rsmd.getColumnCount();
    
     while (rs.next()) {
          for (byte i = 1; i <= numberOfColumns; i++) {
               result = result+" "+rs.getString(i);
          }
     }
    

    【讨论】:

      【解决方案2】:

      是的,您会限制返回的字段。这是一个 SQL 问题,而不是 Java 问题。将您的查询更改为以下内容:

      select this, that, theothercolumn from mytable;
      

      然后你可以使用它来动态限制它:

      rs.getMetaData().getColumnCount()
      

      【讨论】:

        【解决方案3】:

        我建议不要使用 SELECT *。如果你知道你想要的列,把它们拼出来。这将使您的代码在面对列更改时更加健壮,并减少线路上的字节数。

        【讨论】:

        • “减少线路上的字节数”到底是什么意思?
        • 如果表中有 100 列,并且您选择 *,这意味着所有 100 列都会为每一行返回到您的计算机,无论您需要多少列。如果该表有一百万行,无论您是否需要,SELECT * 都会将它们全部带回。在客户端过滤它们是低效的。在 SQL 中进行过滤——它擅长的事情——并且只带回你需要的东西。
        • 啊,好的!有那么一秒钟,我认为通过它的 column_number 和它的 column_name 访问记录之间可能存在差异......哈哈
        猜你喜欢
        • 2023-04-05
        • 2023-03-09
        • 2014-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-30
        • 2017-03-24
        • 1970-01-01
        相关资源
        最近更新 更多