我可以问一下,在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);
}
}
首先,没有编译器错误。如果调试器行为异常,您为什么会这样想呢?
其次,stmt.executeQuery()
不能返回null,因此请删除该null检查。参见javadoc:
返回一个
ResultSet
包含查询产生的数据的对象;绝不null
调用resultSet.next()
将“光标”移动到下一行。参见javadoc:
将光标从当前位置向前移动一行。甲
ResultSet
光标最初位于第一行之前; 对该方法的第一次调用next
使第一行成为当前行;第二个调用使第二行成为当前行,依此类推。
因此,如果您刚刚跳过executeQuery()
调试器中的调用,则将其放置resultSet
在第一行之前。
如果随后要求调试器(使用“ Display”)对表达式求值,则调试器将实际调用该next()
方法,该方法将前进到第一行并返回true
。
当您随后逐步跳过该if
语句时,它将next()
再次调用该方法,该方法将尝试前进到结果集的第二行。假设只返回了一行,它将返回false
并且您的if
块被跳过。
因此,通过评估在调试器中的表情,你造成了一个且仅返回行的跳跃。
简而言之:当心在调试器中评估表达式的副作用。您不应该评估任何有副作用的东西。仅评估幂等方法,例如,吸气剂,toString()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句