连接池用完如何回收到池中,并保证连接池的连接数量

哪位可以详细的介绍一下,连接池用完是如何放回池中的,并保证连接池的数量,请详细说一下实现原理,最好有代码,谢谢啦

你要自己实现一个连接池?如果不是的话,你也不需要深究其原理,如果你真的想知道的话,那么,你可以去看一下 DBCP 的源码,它是 Tomcat 自带的。其实,它的原理就跟线程池差不多。大概是这个样子的,用一个容器,比如,一个 List,在初始化的时候,就往这个 List 里面存入 10 个 Connection ,然后你需要的话,就从这个 List 中取一个,如果多个人同时需要连接的话,那么就依次从这个 List 中取,但最多只能同时有10个人可能获得其中的连接,其他人,则处于等待状态。当那10个获得连接的人处理完事情之后,就又会把他们所获得的 Connection 放回到这个 List 中去,以供其它人使用。
这样做的好处就是,不用一旦有人想获得一个 Connection ,就去与数据库建立连接,因为连接的建立与销毁是高代价的。

连接池这块并不是很了解 但有一段自己以前写的代码 贴出来 可能能提供参考 呵呵

private static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521:orcla";
private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String USER = "newer";
private static final String PWD = "newer";

private static ComboPooledDataSource cpds = null;
static{
    try {
        cpds = new ComboPooledDataSource();
        cpds.setJdbcUrl(URL);
        cpds.setDriverClass(DRIVER);
        cpds.setUser(USER);
        cpds.setPassword(PWD);
        cpds.setInitialPoolSize(50);//设置初始化50个连接
    } catch (PropertyVetoException e) {
        e.printStackTrace();
    }
}
//得到连接
public static Connection getConn(){
    try {
        return cpds.getConnection();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

//释放连接 使之回到连接池中
public static void CloseConn(Connection conn){
    try {
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }finally{
        if(conn != null){
            conn = null;
        }
    }
}

public static void main(String[] args){
    Connection conn = DBConnection.getConn();
    System.out.println(conn);
    DBConnection.CloseConn(conn);
}

lz可以看看c3p0连接池的原理,是如何管理数据库连接的,也可以看看他的源码。

如何放回池中的问题一楼给出的解答差不多是这个原理,不多解释了。
如何确保连接池中的最小连接数呢?
有动态和静态两种策略。动态即每隔一定时间就对连接池进行检测,如果发现连接数量小于最小连接数,则补充相应数量的新连接,以保证连接池的正常运转。静态是发现空闲连接不够时再去检查。
具体的可以看连接池实现的源码,推荐DBCP、C3P0。