JDBC的版本是多少的?1.2的话stmt好像最多用6~7次,最好用一次关一次。
你的Stmt没有关闭啊。这是大忌啊。
记录数多少不是大问题的。

解决方案 »

  1.   

    jdbc为oracle中的classes12.zip,stmt在程序运行完后是关闭了的。
    这里没有写出来。
      

  2.   


        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++){ 
    stmt=null;//初始化stmt对象。
        String sSql = "select sum(num) from example "
        result = stmt.executeQuery(sSqlStr) ;
                if (result.next())
    result.getLong(1) ;
    result.close();//查询后就把rs关闭
              }   
       }
      

  3.   

    一定要注意,rs用完后要关闭,你每次循环都没有关闭rs,当然会把rs用尽了。还有就是stmt也应该在每次使用前,初始化。
    按我上面给你的代码处理,就不会有问题了。
      

  4.   

    http://www.csdn.net/expert/topic/1061/1061968.xml?temp=.3612482
      

  5.   

    同意wjmmml(笑着悲伤) 的意见。
    而且最后connection也是一定要关闭的。否则运行一段时间connection pool就被占满了。
    stmt最好也要关闭。
    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++){ 
    stmt=null;//初始化stmt对象。
        String sSql = "select sum(num) from example "
        result = stmt.executeQuery(sSqlStr) ;
                if (result.next())
    result.getLong(1) ;
    result.close();//查询后就把rs关闭
              }   
       }
       stmt.close();//先关stmt
       conn.close();//conn是一定要关闭的
      

  6.   

    我觉得把for里面的程序写成一个方法,然后调用会不会好点呢,这样java的回收机制就可能用得更好,而且那段代码java可能先放在内存中,如果不调用才释放,如果经常调用可能就不释放先,这样就不用考虑关闭等问题了,因为它的生存期只在方法中。知道我再说什么吗?
    public long forselect(){
        Statement stmt = conn.getConnection.createStatement() ;
        String sSql = "select sum(num) from example "
        result = stmt.executeQuery(sSqlStr) ;
        if (result.next())
    return result.getLong(1);
         }else{
             return "";
         }
    }
      

  7.   

    楼上的说法不对,你上面的写法,和楼主的是一样的,都没有关闭rs,方法和代码没有区别,不是说,你写成方法了,jvm就能在你没次调用前就初始化rs的,必须关闭rs和stmt,哪怕是就一次查询。这是严格的要求,如果你不信,可以那你的代码做一下测试。多次运行后,,一定和楼住的情况一样。
      

  8.   

    连接池怎么用呀,能不能把你的代码发给我看看。谢谢
    [email protected]
      

  9.   

    巧了,我最近也在写这个东西,原因可能和楼上的wjmmml(笑着悲伤)和 
    IronPromises(铁诺)一样,就是你的statement和result在查询完之后没有关闭,还有数据库连接也要关闭。不过想请教一下两位,result和stmt一定要初始化嘛?我觉得好象不初始化也没多大影响啊?等待!!!!!!!!!!!!!!!!!!
      

  10.   

    当你重复使用时,就要把他初始化,所谓stmt初始化就是复给null。对于rs就要关闭后在使用。
      

  11.   

    现在出现一个问题,按楼上的这样做,速度上很慢,而且一个在运行,另一个
    根本就进不了该系统,而且还出现"关闭的语句"错误。
    出错地方因result = stmt.executeQuery(sSqlStr) ;只有在两个同运行时才出这个问题。一个运行是没有问题的。
      

  12.   

    resultSet关不关无所谓,stmt不必初始化,你的这段程序没有问题。
    建议贴出全部程序。
      

  13.   

    to:Andrawu(晓彬)
    你在/usr中建立java目录,然后在java目录中建立jdbc目录,然后把classes.zip 放到里面我的jdbc和oracle连接是oracle中的classes111.zip 不是classes12.zip
    我的没有出现那种现象,你把oracle 中的jdbc中的classes111.zip 放到
    classpath中classpath=/usr/java/jdbc/classes111.zip
      

  14.   

    再问wjmmml(笑着悲伤),如果不对result和stmt进行初始化,而进行重复使用,会产生什么后果呢?
      

  15.   

    最好贴出源程序,有助于找原因。
    conn是什么类型的对象?conn取出的Connection对象最后关闭了没有?stmt最后关闭了没有?为什么写那么多嵌套的for循环?
      

  16.   

    to:Andrawu(晓彬)谢谢你以前帮我不少忙上面一句话说错了,
    你在/usr中建立java目录,然后在java目录中建立jdbc目录,然后把classes111.zip 放到里面
      

  17.   

    to aben456(风轻扬) :
    同意!所谓的关闭就是将Connection释放回connection pool。
      

  18.   

    现在问题是一个人访问没有问题,两个同时访问就会出现"关闭的语句"错误。出错地方因result = stmt.executeQuery(sSqlStr) ;哎,看样子是搞不定了:(
    帮忙帮忙,如果搞定再给200分。
      

  19.   

    很怪,两个人同时访问,应该不会相互影响。1、确认连接池运转正常,具有空闲连接。(查看你连接池的log文件)
    2、确认jsp中无<jsp:useBean>的scop属性是application的bean实例。
    3、确认jsp中无<%! %>定义的变量。另外,你用的数据库driver是JDBC第四类驱动吗?Oracle 的四类驱动包最新版本为:classes12.jar
      

  20.   

    很希望你把源程序贴出来!!我们帮你找找原因因为按你贴的程序在我的机器里运行正常(数据库表和字段不同),而且我把循环变量 i 改成了循环100次,而且同时打开3个IE窗口访问该页面。
      

  21.   

    谢谢楼上的这么有耐心帮我测试,十分感激!
    1、确认连接池运转正常,具有空闲连接。(查看你连接池的log文件)
       连接池运转正常,其实在程序运行过程中始终都是用的是一个连接,是
    从连接池中取出来的,连接池是我们自己写的。应该还有空闲连接的。
    没有log文件,但信息可以从后台输出。2、确认jsp中无<jsp:useBean>的scop属性是application的bean实例。
       没有。
    3、确认jsp中无<%! %>定义的变量。
       没有。另外,你用的数据库driver是JDBC第四类驱动吗?Oracle 的四类驱动包最新版本为:classes12.jar
     用的是oracle中自带的classes12.zip。程序代码比较繁琐,其实三个循环是在参数的。不便在此帖出。
    等过一断时间,可以帖出错误信自己 。
      

  22.   

    我有这样一个怀疑,从你所说的单用户没有问题来看
    会不会是你的两个用户用用的是同一个connection实例啊
    这样用户A正在用着的connection又被B用了
    A这边才会出错,建议仔细检查一下你们的连接池程序
      

  23.   

    多个人同时访问数据库时要定义多个Connection,每个操作与自己的
    Connection对应。检查一下程序是否有这样的错误,不妨试一下
      

  24.   

    你超过了resultset的界限,比如只有30个结果你访问了第31个,有时候不验证resultset的返回会造成这种情况。即没返回resultset.