数据库连接池每次运行时,只初始化一次。Connection 对象进行 close 时并不是真的关闭,而是将连接归还给数据库连接池。
一、DBCP方式(使用jar包:classes12.jar commons-dbcp-1.2.2.jar commons-pool.jar)
1、正常调用参数方式:
@Test
public void dbcpTest(){
try {
BasicDataSource dataSource=new BasicDataSource();
dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:orcl");
dataSource.setUsername("scott");
dataSource.setPassword("tiger");
Connection conn = dataSource.getConnection();
System.out.println(conn.getClass());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2、调用配置文件方式:(两种方式)
①BasicDataSource 对象建立连接:(该方法中配置文件里的参数名可随意定义)
PS:代码中的流方法仅用于 jdbc.properties 文件在 src 外部
//BasicDataSource 对象建立连接,调用配置文件方式
@Test
public void dbcpTest(){
String driver="";
String url="";
String user="";
String psw="";
//此种流的方式请注意 jdbc.properties 的放置位置
File file=new File("jdbc.properties");
try {
InputStream in=new FileInputStream(file);
Properties ppt=new Properties();
ppt.load(in);
driver=ppt.getProperty("driver");
url=ppt.getProperty("url");
user=ppt.getProperty("user");
psw=ppt.getProperty("psw");
BasicDataSource dataSource=new BasicDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(psw);
Connection conn=dataSource.getConnection();
System.out.println(conn.getClass());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
②BasicDataSourceFactory 对象建立连接:
(此方法中配置文件里的参数名,为BasicDataSource对象的setXXX()方法里的方法名)
对应下图中的各个setXXX()方法
PS:代码中的流方法仅用于 dbcp.properties 文件在 src 内部(与上面在src外部的根据文本位置不同可混合使用)
//BasicDataSourceFactory对象建立连接,调用配置文件方式
@Test
public void dbcpFactoryTest(){
try {
//此种流的方式,请注意 dbcp.properties 的位置
InputStream in=this.getClass().getResourceAsStream("/dbcp.properties");
Properties ppt=new Properties();
ppt.load(in);
DataSource dataSource=BasicDataSourceFactory.createDataSource(ppt);
System.out.println(dataSource);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
二、C3P0方式(使用jar包:c3p0-0.9.1.2.jar classes12.jar)
1、调用参数方法
//C3P0建立连接池,调用ComboPooledDatatSource类中的参数方法时
@Test
public void c3p0Test(){
ComboPooledDataSource comData=new ComboPooledDataSource();
try {
comData.setDriverClass("oracle.jdbc.driver.OracleDriver");
comData.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:orcl");
comData.setUser("scott");
comData.setPassword("tiger");
Connection conn=comData.getConnection();
System.out.println(conn);
} catch (PropertyVetoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2、调用配置文件(此方法中的配置文件必须放在src下,调用的是xml里面配置的 标签 name值。其中对应规则同上。)
//C3P0建立连接池,调用配置文件时
@Test
public void c3p0FileTest(){
try {
DataSource dataSource=new ComboPooledDataSource("C3P0");
Connection conn=dataSource.getConnection();
System.out.println(conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}