问一个有关ResultSet问题。

在我的项目中有类似这样的代码。


ResultSet result = null ;
Statement stmt = conn.getConnection.createStatement() ;
for (i=0; i<20; i++ ){
for (k=0; k<5; k++)
for(j=0; j<5; j++){
String sSql = "select sum(num) from example "
result = stmt.executeQuery(sSqlStr) ;
if (result.next())
result.getLong(1) ;
}
}

在代码运行时出现极不稳定的情况,如果循环的次数较多的话(大约共循环100次左右),
有时候出现"用尽的ResultSet"或"关闭的语句",但有时候又没有错误。

如果循环的次数较小(大约共循环20次左右)就不会出现
任何现象。

我将以上代码改为以下现象也不行。


String sSql = "select sum(num) from example "
ResultSet result = null ;
PreparedStatement pstmt = conn.getConnection.createPrepareStatement(sSql) ;
for (i=0; i<20; i++ ){
for (k=0; k<5; k++)
for(j=0; j<5; j++){
result = pstmt.executeQuery() ;
if (result.next())
result.getLong(1) ;
}
}

ResultSet是危险的东西,我真看不出你为什么一定要这样做。

我想应该是想测试查询速度吧

你是不是用Oracle?

其实大部分数据库都一样,不能开太多的cursor,(Statement, ResultSet等),开后必须尽早关闭,而且他们似乎在垃圾回收的时候并不关闭。如果要增加的话需要改动服务器段的某个设置。