数据库连接的建立及关闭极耗系统资源的操作,在多层结果的应用环境中,这种资源的耗费对系统性能影响尤为明显。
通过DriverManager获得的数据库连接,一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完后立即关闭连接。频繁的打开、关闭连接将造成系统性能低下。
数据库连接池的解决方案是:当应用程序启动时,系统主动建立足够的数据库连接,并将这些连接组成一个连接池。每次应用程序请求数据库连接时,无需重新打开连接,而是从池中取出已有的连接使用,使用完后,不再关闭数据库连接,而是直接将连接归还给连接池。通过使用连接池,经大大提供程序运行效率。
DBCP数据源是Apache软件基金组织下的开源连接池实现。Tomcat的连接池正是采用该连接池来实现的。数据库连接池可以与应用服务器整合使用,也可由应用程序独立使用。
package com.sun.demo;
import java.sql.Connection;
import org.apache.commons.dbcp.BasicDataSource;
public class Test04 {
/**
* 此程序使用DBCP数据源取得数据库连接。
*
* 主流数据库连接池之一(DBCP、c3p0、proxool),单独使用DBCP需要使用commons-dbpc.jar、
* commons-collections.jar、commons-pool.jar三个包
* commons-dbpc.jar:连接池的实现
* commons-pool.jar:连接池实现的依赖库
*/
public static void main(String[] args) throws Exception {
// 创建数据源对象
BasicDataSource ds = new BasicDataSource();
// 设置连接池所需的驱动
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
// 设置连接数据库的url
ds.setUrl("jdbc:oracle:thin:@127.0.0.1:1521:jssbook");
// 设置连接数据库的用户名
ds.setUsername("scott");
// 设置数据库的密码
ds.setPassword("tiger");
// 设置连接池的初始连接数
ds.setInitialSize(5);
// 设置连接池最多可有有多少个活动连接数
ds.setMaxActive(20);
// 设置连接池中最少有2个空闲的连接
ds.setMinIdle(2);
// 通过数据源获取连接
Connection con = ds.getConnection();
con.close();
}
}
数据源和数据库连接不同,数据源无须创建多个,它是产生数据库连接的工厂,因此整个应用只需要一个数据源即可。建议吧上面的程序中ds设置成static成员变量,并且在应用开始时立即初始化数据源对象,程序中所有需要获取数据库连接的地方直接访问该ds对象,并获取数据库连接即可,当数据库访问结束后,程序还是像以前一样关闭数据库连接。
浙公网安备 33010602011771号