我写了一个Database的类,是用来调用数据库的,里面的方法使用static进行定义,并且定义了一个getResult(sql)的方法,然后我在jsp页面直接用rs = Database.getResult(sql)进行数据读取,现在问题是,如果数据量少的时候就很正常,但当有多个并发(就是多个人同时读取)时,就经常返回ResultSet closed 大概的提示,尤其在一些b/s系统上明显,我想问一下各位高手,这个问题有没有好的方法解决啊?感谢!!

解决方案 »

  1.   

    getResult 应该不是这里的问题
      

  2.   

    因为在数据库调用中我还需要数据库调用,所以我写了两个Database类,分别时Database1和Database2,内容是一样的,然后我用两个RS,就是rs1和rs2分别进行rs1 = Database1.getResult(sql)和rs2 = Database2.getResult(sql),当一个客户端进行操作时是完全没问题的,但当有多一个客户端一齐操作时,就会导致随便一个返回ResultSet Closed这个例外。现在问题就是这样,有办法解决吗?
      

  3.   

    你的代码中应该有ResultSet closed 的
    并发的时候是有问题的,你共用了一个ResultSet 
    所以会有异常
    考虑一下ThreadLocal吧
      

  4.   

    对啊,每次用完rs后我都进行rs.close()操作的,但如果不用的话会不会资源没有正确释放呢?ThreadLocal是什么东西来得啊?
      

  5.   

    方案一:用连接池。 (推荐)
    方案二:getResult(sql)前面加synchronized关键字,这样可以保证同时只能单线程调用。
    不过对性能影响很大,特别是前一个用户在进行时间很长的操作时,第二个就只能等。
      

  6.   

    用连接池吧,方便你的程序调用了finally()方法每次都需要关闭连接,这是导致问题的根源,再检查你的程序吧
      

  7.   

    1、把rs.getString()等东西尽量在类里写,进行下封装,因为如果程序正在对数据库进行操作时被关闭页面了,那么会不会就运行不到rs.close()了呢2、rs.close()这个东西千万别忘记了3、短时间内非常频繁的访问数据库会造成无法连接的问题,尽量优化下查询程序,也可以使用连接池来限制下同时开启的连接的数量