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