连接池存在的理由:
- 传统数据库连接方式缺点: 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也比较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、宕机。
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存回连接池中,而并非真正的关闭。