即使条件为真也无法进入while循环

Posted

技术标签:

【中文标题】即使条件为真也无法进入while循环【英文标题】:Failure to enter the while loop even when the condition is true 【发布时间】:2016-08-03 16:36:34 【问题描述】:

我正在从数据库中提取数据。请在下面找到代码:

我正在使用 Springframework.jdbc 中的“org.springframework.jdbc.support.rowset.SqlRowSet”。

String query="SELECT * from TABLE_NAME where id=? and password=?";
args.add(userId);
args.add(password);
SqlRowSet rs = this.jdbcTemplate.queryForRowSet(query, args.toArray());
while (rs.next()) 
---Some Code---

rs.next() 是真的,但它不会进入循环。需要一些帮助来解决这个问题。任何帮助表示赞赏。

【问题讨论】:

这没有意义,是什么让你确定 rs.next() 返回 true? 什么是SqlRowSet 在调试代码时,我发现该值为真,但没有进入循环。 @elkorchianas @Pshemo 它是“org.springframework.jdbc.support.rowset”中的一个类 如果循环没有执行,并且您确定循环没有执行,那么无论您怎么想,re.next() 都不会返回 true。就是这么简单。 【参考方案1】:

这只是一个猜测,但既然您知道 rs.next() 返回 true,这意味着您执行了它(在调试模式下或打印到控制台或其他方式)。

每次执行时,它会将行集推进到下一行(如果有的话)。如果您的行集仅包含 1 行,并且您在循环之前“检查”rs.next() 返回的值,则将永远不会进入循环,因为当再次调用它时没有更多行,因此它返回 false

【讨论】:

这几乎肯定是答案。 OP 没有其他方法可以确定它返回 true,因为它应该没有进入循环。【参考方案2】:

我不知道为什么。但是我改变了实现。通过从 resultSet 获取大小,我已将 while 循环更改为 for 循环。非常感谢您的建议。

int size =0;  
            if (rs != null)   
              
                rs.beforeFirst();  
                rs.last();  
            size = rs.getRow();
            
            for (int i =0;i<size;i++)//Do SOMETHING

【讨论】:

以上是关于即使条件为真也无法进入while循环的主要内容,如果未能解决你的问题,请参考以下文章

while循环。for循环

while循环语句

Shell脚本之while循环

如何选用forwhiledo while循环

循环语句

循环结构(while循环)