While循环在ResultSet java中不起作用

Posted

技术标签:

【中文标题】While循环在ResultSet java中不起作用【英文标题】:While loop is not working in ResultSet java 【发布时间】:2018-03-09 17:00:04 【问题描述】:

我正在使用以下代码从 sql 查询中获取结果:

try
        stmt = con.createStatement();

        String sql = "SELECT DISTINCT COLUMN_NAME FROM TABLE_NAME";

        rs = stmt.executeQuery(sql);

        String[] commaseperatedValues ; 
        while (rs.next()) 
          //do something
           log.debug(" SetString string is  "+rs.getString(1));
            if(",".contains(rs.getString(1)))
                commaseperatedValues = rs.getString(1).split(",");
                for(String str : commaseperatedValues)
                    list.add(str);
            else
                list.add(rs.getString(1));
            

        
        
catch

在日志中 ResultSet 打印为:

org.apache.commons.dbcp.DelegatingResultSet@f34e856

但它没有进入while循环。从 SQLDeveloper 它可以正确地给出结果。我得到了 (430) 个结果。但是 while 循环在这里不起作用。感谢您提供任何帮助。

【问题讨论】:

你怎么知道while循环没有进入? 在进入循环之前使用调试器检查rs的值。 您知道您的查询至少返回 1 行吗? @diginoise 是的,正如我所说,而 sql developer 中的相同查询返回 430 个结果 向我们展示循环内部的代码。 Edit 您的问题 - 请不要在 cmets 中提供邮政编码或其他信息。 【参考方案1】:

你肯定会得到结果。它的对象。所以对象需要根据你的数据库列的名称进行切片。

例子:

String firstName = rs.getString("first_name"); 

while...里面就可以打印出来了

【讨论】:

rs.getString("first_name"); first_anme 和 column_name 一样吗? 是的。假设,您期望得到一个包含姓名、身份证、电话号码的结果。那么你可以通过: String name = rs.getString("name"); Int id = rs.getInt("id"); String phone = rs.getString("phone"); 在查询中发布的我只是得到一个特殊列结果 是的。因为你使用了 DISTINCT。它就是这样做的。它为您提供了该非常具体的列的结果。这不是你想要的吗? 在这里使用这样的东西有什么意义?:String name = rs.getString("COLUMN_NAME");因为我只是得到多行的结果,所以我需要对其进行迭代,对吗?

以上是关于While循环在ResultSet java中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

while 循环在 useEffect 挂钩中不起作用

为啥我的 while 循环中的条件在 python 中不起作用?

警报(int)在while循环中不起作用

R Sys.sleep 打印在 while 循环中不起作用

std::cin 在 do-while 循环中不起作用

file_exists() 在 while 循环内的 php5 中不起作用