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();