我们正面临着Java 1.6x(特别是1.6_65)的奇怪问题
我们有一个ResultSet提取器,它具有以下while循环。
int limit = Integer.MAX_VALUE
int i = 1;
while (i <= limit && rs.next()) {
//some extraction code.
.....
i++
}
如果我们首先使用rs.next()
更改条件表达式的顺序,此代码仅间歇性地从ResultSet返回一行,如下所示
int limit = Integer.MAX_VALUE
int i = 1;
while (rs.next() && i <= limit ) {
//some extraction code.
.....
i++
}
问题永远不会发生,这种情况只发生在Java 1.6x中,不会发生1.7 +
有人遇到过这个问题吗?
我还想在此指出的另一个细节是,只有在我有
的情况下才会出现问题int limit = Integer.MAX_VALUE
如果将此更改为如下所示,则问题将消失。
int limit = 10000
我在ResultSet中获得10000或总记录,以较少者为准。
答案 0 :(得分:1)
原来是因为这个
JDK 6 bug JDK-2213657:循环展开优化导致错误的结果。 (http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7044738)