可能跟缓存有关,servlet经常出现这种问题。

解决方案 »

  1.   

    可以用你得到的Connection 来创建一个Statement ,如果没抛出SQLException 
    就表明是可用的,反之,说明已经关闭了!
    example:
    try{
    if (con.isClosed()) {
           log.log("Removed bad connection from " + name);
           con = getConnection();
    }else{
           stmt=con.createStatement();
           stmt.close();
    }
    catch(SQLExcepiton e){
    .......
    }
      

  2.   

    Connection.isClose()只是jdbc中的接口具体的实现在每一家数据库提供商的jdbc中 如oracle的直接连接中
        public synchronized boolean isClosed()
            throws SQLException
        {
            if(OracleLog.TRACE)
                OracleLog.print(this, 1, 8, 16, "OracleConnection.isClosed() returned " + closed);
            return closed;
        }
    这里的closed是在initialize()时如果连接成功则closed= false;
    在close()时如果成功则closed=true;
    值得注意的是    public synchronized void close()
    public synchronized boolean isClosed()都是同步方法.
    如果有其他应用在使用该连接则,closed()是就不会真正的close掉此连接
    那时isClosed()返回还是false;
      

  3.   

    可我的db是oracle8.1.6,已经申明完全支持jdbc2的,我也没有使用多线程,何况我连网多断了,为什么还是返回false?