我没有用循环,不过我的选择语句是在bean里写的,在页面调用。

解决方案 »

  1.   

    函数如下:
    public ResultSet select(String sql)
    {
    try
    {
    Statement stmt;
    stmt=conn.createStatement();
    ResultSet rs;
    rs=stmt.executeQuery(sql);
    return rs;
    }
    catch(Exception ex)
    {
    System.err.println(ex);
    System.out.print("select error");
    return null;
    }
    }
      

  2.   

    stmt没有close()
    如果是每次都用的一个con
    很荣幸的告诉你,你只能用100次但你也别先急着关,一关了,rs也保持不住该怎么办?自己想吧
      

  3.   

    for(int i=0; i<1000;i++){
    System.out.println("i="+i);
          Statement  stmtT = con.createStatement();
    stmtT.close();
    System.gc();
    }
    你可以试一下这个代码,
    到100的时候,你的那个错误就会出现,不过我的机子上是100,你的就不一定了
      

  4.   

    在写一个方法:closeAll()
    当调用完select()后,用closeAll()关掉所有的connection就可以啦!
      

  5.   


    我也曾遇过这种情况.这是由于没有关闭Statement,Connection引起的.
    方法里返回ResultSet,不能在返回前关闭Statement,否则ResultSet得不到.
    所以不能使用返回ResultSet的方法,如果一定要返回这样的值,只有类似这样:
    public ResultSet select(String sql,Statement stmt){
    ....//你应该知道怎么了吧
    }
    在外面使用完这个方法后,记得关stmt.
    另外或者这样:
    public Vector select(String sql){....//里面的stmt等用完要关闭}
    我常这样用,希望对你有帮助.
      

  6.   

    rs,stmt,conn
    每打开一次,都得要关闭的呀。
    最好是调用连接池吧
      

  7.   

    zhu_liping(zz) 
    连接池怎么用啊?
      

  8.   

    在oracle里,其实它的游标数就对应着jdbc连接后的select语句得到的结果集,这里你只要先关掉resultset再关stmnt就行了,不用连接池的时候创建一个连接,从头用到尾,可以到最后才关闭的(只要不在中间继续创建就行),用连接池的话它会有一个空闲等待时间,过了这个时间你不用,它会自己关掉这个连接的。