Java 编译器中的错误?

Java 编译器中的错误?,java,Java,在Java中,当我在IF语句中突出显示(resultSet!=null&&resultSet.next())并在调试模式下(带断点)显示IF后,它似乎不会进入IF语句,尽管结果返回TRUE try { conn = new BaseDA().getConnection(); stmt = conn.prepareStatement(_sqlIns); stmt.setInt(1, obj.getYrStart());

在Java中,当我在
IF
语句中突出显示
(resultSet!=null&&resultSet.next())
并在调试模式下(带断点)显示
IF
后,它似乎不会进入
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);
            }
        }

首先不,编译器中没有错误

第二:你确定你得到了一些结果吗??如果是,请继续

解决方案:您没有根据建议迭代
结果集
,因此只能得到一个结果,而不是完整的结果集:

while (rs.next()) {

}
因此,你必须:

ResultSet resultSet = stmt.executeQuery();
while (resultSet.next()) {
    result = resultSet.getString(_colnm1);
}
首先,没有编译器错误。如果调试器的行为异常,您为什么会这样认为

第二,不能返回null,因此请删除该null检查。见javadoc:

返回包含查询生成的数据的
ResultSet
对象从不
null

调用将“光标”移动到下一行。见javadoc:

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

因此,如果您刚刚跳过调试器中的
executeQuery()
调用,则
resultSet
位于第一行之前

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

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

因此,通过在调试器中对表达式求值,您导致跳过了一行(也是唯一返回的一行)


简而言之:注意在调试器中计算表达式的副作用。你不应该评估任何有副作用的东西。仅评估幂等方法,例如getter、
toString()

编译器中的标题错误,而不是最佳的。。。似乎更可能是你犯了一些错误,比如。。。。
resultset
中没有结果?即使您的resultset不为null,resultset.next()也会返回false。因此,如果不执行block。在进行调试时,resultset中的值是多少?添加一些控制台并使用getRow()查看您在查询时恢复了多少行。@Jordi Castilla Hi,从insert SQL语句(输出)返回结果集时,我只得到了1个结果。这会有什么不同吗?@SicaYoumi当然,你不是在重复它。。。检查我的答案和文档,如您好,谢谢您的回答,您的提问将使我免于沮丧。如果不完全理解next()方法,那么它是非常危险的。喜欢我..哈哈谢谢你给我解释。我认为这是调试器中“显示”中的一个bug。哈哈,没想到会触发**next()**方法^ ^和平。