获取及关闭连接的类是这样写的:
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class DBUtil {       public static Connection getConnection()  {
Connection con=null;
  try{
con=DriverManager.getConnection("proxool.oracle");
} catch (SQLException e) {
e.printStackTrace();
}
return con;

}public static void releaseResultSet(ResultSet rs) {
// TODO 自动生成方法存根
try{
 if(rs!=null){
    rs.close();
  }

         }catch( Exception e){
   e.printStackTrace();

         }

}public static void releaseStatement(PreparedStatement ps) {
    // TODO 自动生成方法存根
   try{
       if(ps!=null){
         ps.close();
       }
   }catch( Exception e){
      e.printStackTrace();

   }
}public static void releaseConnection(Connection con) {
// TODO 自动生成方法存根
try{
                if(con!=null){
                 //con.close();
                
}

}catch( Exception e){
e.printStackTrace();

}
} public static void releaseStatement(Statement ps) {
// TODO 自动生成方法存根
try{
                if(ps!=null){
                 ps.close();
}

}catch( Exception e){
e.printStackTrace();

}
}}
我使用
getConnection()创建连接没有问题,但是在关闭连接的时候
使用releaseConnection(),如果在releaseConnection()执行con.close(),即
显式关闭连接的话,下一次获取连接的时候报“使用的连接已经关闭的错误”。
如果不执行con.close(),则下次调用会创建新的连接多次之后就会达到上限,报“已经达到了连接最大数量”的错误。请问这个问题应该如何解决?最好能提供使用的代码,谢谢!!

解决方案 »

  1.   

    lz的同一个Connection对象是否被多次使用了。
      

  2.   

    没有啊,只用一次就释放掉了,不知道是否应该调用con.close()释放
      

  3.   

    一般连接池中的releaseConnection()方法是将从ConnectionPool中获得的Connection对象放回到ConnectionPool中,而不是物理性的关闭Connection对象。参考一下:http://community.csdn.net/Expert/topic/5538/5538855.xml?temp=.8157007中的:
    /*将连接返回给连接池*/
    public synchronized void releaseConnection(Connection con) {
        // 将指定连接加入到向量末尾
        connections.addElement(con);
       //连接数减一
        inUse--;
    }
      

  4.   

    可能是读取第一次连接的ResultSet出错,将rs作为一个list返回试试
      

  5.   

    那个问题解决了,但现在 为什么每隔1分钟左右就会爆出如下log信息??
    2007-05-17 15:17:20:296 [org.logicalcobwebs.proxool.oracle,447,HouseKeeper]-[DEBUG]  
     000165 (00/04/00) - #0132 removed because it has problems: java.sql.SQLException: ORA-00923: 未找到预期 FROM 关键字
    .
    2007-05-17 15:17:20:312 [org.logicalcobwebs.proxool.oracle,447,HouseKeeper]-[DEBUG]  
     000165 (00/03/00) - #0133 removed because it has problems: java.sql.SQLException: ORA-00923: 未找到预期 FROM 关键字
    .
    2007-05-17 15:17:20:312 [org.logicalcobwebs.proxool.oracle,447,HouseKeeper]-[DEBUG]  
     000165 (00/02/00) - #0134 removed because it has problems: java.sql.SQLException: ORA-00923: 未找到预期 FROM 关键字
    .
    2007-05-17 15:17:20:328 [org.logicalcobwebs.proxool.oracle,447,HouseKeeper]-[DEBUG]  
     000165 (00/01/00) - #0135 removed because it has problems: java.sql.SQLException: ORA-00923: 未找到预期 FROM 关键字
    .
    2007-05-17 15:17:20:375 [org.logicalcobwebs.proxool.oracle,447,HouseKeeper]-[DEBUG]  
     000165 (00/00/00) - #0136 removed because it has problems: java.sql.SQLException: ORA-00923: 未找到预期 FROM 关键字
    .
    2007-05-17 15:17:20:500 [org.logicalcobwebs.proxool.oracle,204,Prototyper]-[DEBUG]  
     000165 (00/01/00) - Connection #137 created to keep 5 available = AVAILABLE
    2007-05-17 15:17:20:640 [org.logicalcobwebs.proxool.oracle,204,Prototyper]-[DEBUG]  
     000165 (00/02/00) - Connection #138 created to achieve minimum of 2 = AVAILABLE
    2007-05-17 15:17:20:781 [org.logicalcobwebs.proxool.oracle,204,Prototyper]-[DEBUG]  
     000165 (00/03/00) - Connection #139 created to keep 5 available = AVAILABLE
    2007-05-17 15:17:20:906 [org.logicalcobwebs.proxool.oracle,204,Prototyper]-[DEBUG]  
     000165 (00/04/00) - Connection #140 created to keep 5 available = AVAILABLE
    2007-05-17 15:17:21:46 [org.logicalcobwebs.proxool.oracle,204,Prototyper]-[DEBUG]  
     000165 (00/05/00) - Connection #141 created to keep 5 available = AVAILABLE后面的创建新连接是为了保持活动连接数,但前面为什么会出现ORA-00923: 未找到预期 FROM 关键字   的错误??
    我可是任何操作都没有做啊??