1、数据库连接池的解决方案是:

   当应用程序启动时,系统主动建立足够的数据库连接,并将这些连接组成一个连接池。每次应用程序请求数据库连接时,无需重新打开连接,而是从连接池中取出已有的连接使用,使用完后不再关闭数据库连接,而是直接将连接归还给连接池。

2、数据库连接池是Connection对象的工厂。JDBC数据库连接池使用javax.sql.DataSource(数据源)来表示,DataSource只是一个接口,其开源的实现有DBCP、C3P0等。

3、DBCP数据源

   相关的jar文件:

      1》commons-dbcp.jar:连接池的实现。

      2》commons-pool.jar:连接池实现依赖库。

   一种连接方式举例:



//创建数据源对象
BasicDataSource ds=new BasicDataSource();
//设置驱动
ds.setDriverClassName("com.mysql.jdbc.Driver");
//设置连接数据库的url
ds.setUrl("jdbc:mysql://localhost:3306/world");
//设置连接数据库的用户名
ds.setUsername("root");
//设置连接数据库的密码
ds.setPassword("1234");
//设置连接池的初始连接数
ds.setInitialSize(5);
//设置连接池最多可有多少个活动连接数
ds.setMaxActive(20);
//设置连接池中最少有2个空闲的连接
ds.setMinIdle(2);



   整个应用只需要一个数据源。关于使用:



//通过数据源获取数据库连接
Connection conn=ds.getConnection();



   数据库访问结束后,还是像往常一样关闭数据库连接。



//释放数据库连接。实际是归还到连接池。
conn.close();



4、C3P0数据源

  C3P0可以自动清理不再使用的Connection,还可以自动清理Statement和ResultSet。

  jar包:c3p0-0.9.1.2.jar

  连接方式举例:



//创建数据源对象
ComboPooledDataSoruce ds=new ComboPooledDataSoruce();
//设置驱动
ds.setDriverClassName("com.mysql.jdbc.Driver");
//设置连接数据库的url
ds.setUrl("jdbc:mysql://localhost:3306/world");
//设置连接数据库的用户名
ds.setUsername("root");
//设置连接数据库的密码
ds.setPassword("1234");
//设置连接池最大连接数
ds.setMaxPoolSize(40);
//设置连接池最小连接数
ds.setMinPoolSize(10);
//设置连接池的初始连接数
ds.setInitialPoolSize(10);
//设置连接池中的缓存Statement的最大数
ds.setMaxStatements(180);



   整个应用只需要一个数据源。关于使用:



//通过数据源获取数据库连接
Connection conn=ds.getConnection();



   数据库访问结束后,还是像往常一样关闭数据库连接。



//释放数据库连接。实际是归还到连接池。
conn.close();