Java 1.6_65 JDBC的奇怪问题

时间:2016-07-20 22:38:43

标签: java jdbc

我们正面临着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或总记录,以较少者为准。

1 个答案:

答案 0 :(得分:1)

原来是因为这个

JDK 6 bug JDK-2213657:循环展开优化导致错误的结果。 (http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7044738

相关问题