问一个有关ResultSet问题。

02-09-28 andrawu

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

    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) ;
          }   
   } 

banq
2002-09-29 00:31

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

Sean
2002-09-29 11:02

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

joachim
2002-09-30 12:15

你是不是用Oracle?

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