你在close之前要判断一下 con != null

解决方案 »

  1.   

    如果con == null 的话con.isClosed()怎么通的过 ,我测国的con是有的,也没有colse 这是执行SQL语句就会报错。
      

  2.   

    struts连接池+mysql;weblogic连接池+oracle,运行一个月都没问题。自己写是不有必要!!可以参考开源项目的代码,如:struts、comm-dbcp、...
      

  3.   

    连接池应该是没有问题,很可能是你自己写的程序的问题,就是相同的Connection,在调用之前被别的线程给close了。也就是被连接池收回了
      

  4.   

    首先敬仰一下楼主,自己写连接池。以下提一些个人意见:
        我在使用Weblogic的Oracle的连接池的时候,记得Oracle的实现上有这样一个设置,即给一个测试语句来测试数据库连接。一般都用 select 1 from dual 。 另外还有一个设置就是多长时间检测一次。一般设置15分钟。
        也就是说Oracle的实现的方法,会自动定期用这个语句去检测数据库的连接。一旦检测到连接失败,就关闭连接并重新建立连接。
        因此我建议楼主可以考虑这样的机制。毕竟网络连接是完全有可能断开的。我碰到的实际例子如下:
        Web服务器与数据库之间有一个安全防火墙,这个防火墙会定期检查连接,如果某个连接长时间(30分钟)没有数据流过,就会被关闭。这种关闭使得检测连接还是打开的,却不能执行sql语句。但是如果连接一直有数据流动,就不会被关闭。
        设置定期检测后,比较好解决了这个问题。我估计楼主可能也有类似情况。为什么你的连接第二天被关闭了,是不是晚上的数据流动没有了。早上就关闭了。
      

  5.   

    我做的是公司内部的一个应用系统,晚上没有人上班使用了,到第二天就不能使用了。谢谢各位支持。应该是如“lhj(努力加油) ”说的这种情况。
      

  6.   

    看来只能在getConnection()中添加测试语句“select 1”了。
    但是连接池的作用,是为了减轻系统由于频繁的获取和释放连接所豪的资源的。那在getConnection()中加了测试语句,就是每次从连接池中取连接都要先执行一下sql语句,那么这样岂不是又增加了数据库的负担?看来是一对矛盾了。郁闷ing
      

  7.   

    遇到过同样问题 ,是因为你在 getConnection() 的时候没有检查该连接是否有用 就将其引用过来,通常情况下 数据库会关闭很长时间没有查询请求的conn  但你没有检查,虽然 你引用的 conn != null 但可能是一个 无效conn了。