Java 编译器中的错误?
在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());
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()**方法^ ^和平。