编译器中的错误?

西卡尤米

我可以问一下,在Java中,我(resultSet != null && resultSet.next())IF语句中DISPLAY以调试模式(带有断点)突出显示后,IF尽管结果返回了,但它似乎不会输入该语句TRUE吗?

    try {
            conn = new BaseDA().getConnection();
            stmt = conn.prepareStatement(_sqlIns);
            stmt.setInt(1, obj.getYrStart());
            stmt.setInt(2, obj.getAge());
            stmt.setDouble(3, obj.getBasicSaving());

            ResultSet resultSet = stmt.executeQuery();
              //can't get in after right-click DISPLAY
            if (resultSet != null && resultSet.next()){
                result = resultSet.getString(_colnm1);
            }
        }
安德烈亚斯(Andreas)

首先,没有编译器错误。如果调试器行为异常,您为什么会这样想呢?

其次,stmt.executeQuery()不能返回null,因此请删除该null检查。参见javadoc:

返回一个ResultSet包含查询产生的数据对象;绝不null

调用resultSet.next()将“光标”移动到下一行。参见javadoc:

将光标从当前位置向前移动一行。ResultSet光标最初位于第一行之前; 对该方法的第一次调用next使第一行成为当前行;第二个调用使第二行成为当前行,依此类推。

因此,如果您刚刚跳过executeQuery()调试器中调用,则将其放置resultSet在第一行之前。

如果随后要求调试器(使用“ Display”)对表达式求值,则调试器将实际调用next()方法,该方法将前进到第一行并返回true

当您随后逐步跳过该if语句时,它将next()再次调用该方法,该方法将尝试前进到结果集的第二行。假设只返回了一行,它将返回false并且您的if块被跳过。

因此,通过评估在调试器中的表情,造成了一个且仅返回行的跳跃。

简而言之:当心在调试器中评估表达式的副作用您不应该评估任何有副作用的东西。仅评估幂等方法,例如,吸气剂,toString()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章