以前是同一个页面中。多次连接,多次释放,后来就是用一次连接,多次使用,一次释放
改了之后就出现这种问题。
不知是错在哪里??一般是同一个页面,并发的时候出现。如果只是一个一个的来,是不会出现的。
一旦出来之后,紧跟着就有
 
java.sql.SQLException: Connection has already been closed.
        at weblogic.jdbc.wrapper.PoolConnection.checkConnection(PoolConnection.j
ava:54)
        at weblogic.jdbc.wrapper.Connection.createStatement(Connection.java:289)
我就不明白,是在哪里释放掉的?

解决方案 »

  1.   

    给楼主一个建议:
    找一个一次连接多次使用的页面,在每次取出的连接工作完成之后,写一个print语句,查看一下是在第几次连接的时候出现的问题。然后对前一次连接所做的工作进行审查。如果所有的页面都是第二次的时候出现的问题,那说不定是weblogic自身对这个connection进行了关闭(只是一个假设。以前用过一段时间的weblogic,感觉它自身带了很多特殊功能)
      

  2.   

    如果是这样,那怎么没有听谁说过weblogic里有这种功能啊
      

  3.   

    使用weblogic的连接池试一下,请确保每次使用完Connection和Statement之后调用close。
      

  4.   

    to ch_jp(ch_jp) :
                     是使用连接沲!
                     以前是没错的,多次连接,多次释放。
                     现在改为,一次连接,多次使用,一次释放就出这种问题了!
      

  5.   

    一次连接,多次使用,一次释放就出这种问题了!
    这样可能会出现释放以后又被使用了,所以释放最好在Application退出的时候释放,不然就会出现上面的问题。
      

  6.   

    to  DanielYWoo(绿色毒汁) :
                             是指同一个页面。因为同一个页面中有多次查询得到结果
                             这种得到查询结果的操作我就封装在一个bean 的方法里。
                             这个方法,每次都是先判断全局变量连接是否有,没连接就先取得连接。                         每个页面在最后一行释放连接.
                              
                             改了之后,如果存在并发的情况,就出现上面那种异常信息!                         请赐教!!!!!目前还是没找到为什么
      

  7.   

    to  drugon(想换工作,准备跳槽................................) :
                                                     是指同一个页面。因为同一个页面中有用到多次查询来得到结果
                             这种得到查询结果的操作我就封装在一个bean 的方法里。
                             这个方法,每次都是先判断全局变量连接是否有,没连接就先取得连接。                         每个页面在最后一行释放连接.
                              
                             改了之后,如果存在并发的情况,就出现上面那种异常信息!
      

  8.   

    >>每次都是先判断全局变量连接是否有
    全局变量?放在哪里的?是不是静态的?摘出来点代码吧
      

  9.   

    //定义全局变量如下 private static DataSource ds = null ;
     private static String dbJndiName = "TestConn" ;//连接沲
     private static Connection connection=null; 
    getReslt()//这方法就是查询结果,然后保存到一个数组里返回回来,在jsp页面多次调用这个方法
    {
          statement = getConnection().createStatement();
    }然后在getConnection()//这个方法就是判断连接取连接
    {
      if(connection  == null )
           {
             if (ds == null) {
               try {
                 Context ctx = new InitialContext();
                 ds = (DataSource) ctx.lookup(dbJndiName);
               }
               catch (javax.naming.NamingException nameEx) {
               System.err.println("----JNDI DataSource '" + dbJndiName +
                                    "' is unaviable");
               }
             }
             try {
               connection = ds.getConnection();
               System.err.println("----Get a connection---");
             }
             catch (java.sql.SQLException sqlEx) {
               System.err.println("----Get a connection is failed");
               sqlEx.printStackTrace();
             }}你看看,会是哪里有点问题??
      

  10.   

    我刚才就怀疑是静态全局变量造成的,看起来就是静态造成的你的private static Connection connection=null; 在整个web 应用程序里就一个,大家都访问,不出错才怪把你的bean里的static方法和属性全去掉,用的时候,在一个页面里new bean,然后用完,在最后close
    应该就可以了
      

  11.   

    to  DanielYWoo(绿色毒汁) :
                          好的,我试试
      

  12.   

    to  DanielYWoo(绿色毒汁) :改为new bean
                              还是很郁闷,异常信息如故啊!
                              不过,好像抛出的次数少一些。 我感觉出现这种情况。
    可能还是我的代码有问题。
      

  13.   

    to freedy_hu(freedy)
                       信誉低不是我的错,我问的问题,都没人回答出来,或者给点正确提示
    你以为我不想结贴啊。我还有几千分呢。留着有什么用啊!
    在这里非常感谢大家,就这个问题,我已经发了两个贴问人了。都没搞出来!
    不过,无论如何,这个贴不管能不能答出来,我都会结贴的不可能是网络问题,因为是在本行上测试!
      

  14.   

    to DanielYWoo(绿色毒汁);
                             你有没有联系方式,MSN不行,我这里现在上不了,不知为什么。
    有QQ没有,有的话,我发信息给你。
      

  15.   

    Session过期了就会出现这个问题,也和weblogic的版本有关。
      

  16.   

    这个设计的架构很成问题。
    private static DataSource ds = null ;
    private static String dbJndiName = "TestConn" ;//连接沲
    private static Connection connection=null;这里,Connection 绝对不可以用 static, 这样可能有同步问题。另外,估计你
    在关闭 Connection 的时候,也有同样的问题。总之,Conection 不要 定义为
    全局变量,而且要保证没有 concurrency 的问题。