不太懂从c3p0连接池获得到的连接,什么时候归还给连接池?

不太懂从c3p0连接池获得到的连接,什么时候归还给连接池?

public void demo2() {
    Connection conn=null;
    PreparedStatement pstmt=null;
    ResultSet rs=null;
    try {

        //获得连接
        conn= JDBCUtils2.getConnection();
        //编写SQL语句
        String sql = "SELECT * FROM user";
        //预编译SQL
        pstmt = conn.prepareStatement(sql);
        //设置参数
        //执行SQL
        rs=pstmt.executeQuery();
        while (rs.next()) {
            System.out.println(rs.getInt("uid") + " " + rs.getString("username") + " " + rs.getString("password") + " " + rs.getString("name"));
        }

    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        JDBCUtils2.release(rs,pstmt,conn);
    }
}
public class JDBCUtils2 {
    private static final ComboPooledDataSource dataSource=new ComboPooledDataSource();

    //获得连接的方法
    public static Connection getConnection() throws Exception {
        Connection conn = dataSource.getConnection();
        return conn;
    }

    //资源的释放
    public static void release(Statement stmt, Connection conn) {
        if (stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            stmt=null;
        }
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn=null;
        }
    }

    public static void release(ResultSet rs, Statement stmt, Connection conn) {
        if (rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs=null;
        }
        if (stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            stmt=null;
        }
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn=null;
        }
    }

}

在这里,

http://img1.sycdn.imooc.com//climg/5cdf5b6a00014f1206440154.jpg

最后只是执行了释放资源的语句代码呀,也就是close掉了连接

http://img1.sycdn.imooc.com//climg/5cdf5b92000180e912150849.jpg

只是释放了资源,close了连接,哪里有归还连接给连接池呢?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

在c3p0 链接池中,当我们使用close()关闭连接时,只是把该连接放回了连接池中,并没有真正的关闭这个连接呦。这个是它底层的实现。同学这里可以记住呦。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • MasonM 提问者 #1
    老师我想知道,因为连接是从连接池中拿到的,当连接执行close的时候,这个连接怎样知道自己是来自连接池所以close的时候要回到连接池呢? 哈哈哈我求知欲有点强,所以希望老师能解答一下!非常滴感谢您!!
    2019-05-18 10:55:59
  • 好帮手慕阿莹 回复 提问者 MasonM #2
    因为这里咱们配置了链接池,并且从链接池中获取的链接,所以它close的时候会回到链接池中呦,再底层的它是如何识别的,老师也需要再去研究研究了呢。同学可以暂时理解为,当配置了从链接池中获取后,close的时候会回到链接池中的。祝学习愉快。
    2019-05-18 16:23:45
  • MasonM 提问者 回复 好帮手慕阿莹 #3
    好的谢谢你老师!
    2019-05-18 18:13:42
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师