c3p0连接池基础知识(自用)(待补充)

连接池存在的理由:

  • 传统数据库连接方式缺点: 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也比较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、宕机。
    c3p0连接池基础知识(自用)(待补充)

c3p0连接池:

  • c3p0连接池是将那些已连接的数据库连接存放在一个容器里(连接池),这样以后别人要连接数据库的时候,将不会重新建立数据库连接,会直接从连接池里取出可用的连接,用户使用完毕后,连接又重新还回连接池中。注意:连接池里的连接将会一致保存在内存里,即使你没用也是一样。所以这个时候你得权衡一下连接池的连接数量了。
    c3p0连接池基础知识(自用)(待补充)

c3p0连接池的实现:

  • 编写连接池需实现javax.sql.DataSource接口。其中定义了两个重载的getConnection方法: Connection
    getConnection() COnnection getConnection(String username,String
    password)

  • 在DataSource构造函数中批量创建与数据库的连接,并把创建的连接保存到一个集合对象中。

  • 实现getConnection方法,让getConnection方法每次调用时,从集合对象中取一个Connection返回给用户。

  • 当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回连接池的集合对象中,而不要把conn还给数据库。

  • 扩展Connection的close方法。

  • 在关闭数据库连接时,将connnection存回连接池中,而并非真正的关闭。