代码改进背景介绍:V3版本
如果每次使用都创建新连接或使用一个连接不利于连接的操作性能提高还会加重连接负担,
为了提高数据库连接使用性能这个问题,我们可以使用
commons-dbcp提供的org.apache.commons.dbcp包中BasicDataSource工具类:即DBCP的方式创建连接池管理连接。
DBCP的方式创建连接池:
首先通过下面的简单实例了解如何使这个工具类:
项目结构如下图所示:
需要引入Jar: commons-dbcp1.4.jar 【其他版本也可】
1.在resources目录下编写数据库连接属性文件db.properties:【注意:这里使用:与=效果一样】
jdbc.driverclass=oracle.jdbc.driver.OracleDriver
jdbc.url:jdbc:oracle:thin:@localhost:1521:orcl
jdbc.user=learn
jdbc.password=learn
jdbc.maxActive=2
jdbc.initSize=1
2.编写DBCP测试类TestDBCP:
/**
* 演示DBCP连接池的使用,高效使用数据库连接
*
* DBCP:实现类BasicDataResource
* @author Cher_du
*
*/
public class TestDBCP {
public static void main(String[] args) throws SQLException {
//创建连接池核心组件对象
BasicDataSource ds = new BasicDataSource();
//初始化连接池
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUrl("jdbc:oracle:thin:@localhost:1521:orcl");
ds.setUsername("learn");
ds.setPassword("learn");
ds.setMaxActive(2);
ds.setInitialSize(1);
//通过连接池获取连接
Connection conn = ds.getConnection();
System.out.println(conn);
}
}
3.运行程序我们可以看到成功通过DBCP连接池获取到数据库连接
通过上面通过DBCP创建连接池再从中获取连接的简单介绍,下面通过它来改进我们之前的DBUtil2工具类:
/**
* 该类用来管理连接
* 数据库连接信息,保存在属性文件中
* 使用连接池获取连接
* @author Cher_du
*
*/
public class DBUtil3 {
private static BasicDataSource ds;
static{
//加载属性文件数据
Properties prop = new Properties();
try {
prop.load(DBUtil3.class.getClassLoader().getResourceAsStream("db.properties"));
String driverClass = prop.getProperty("jdbc.driverclass");
String url = prop.getProperty("jdbc.url");
String user = prop.getProperty("jdbc.user");
String password = prop.getProperty("jdbc.password");
String strMaxActive = prop.getProperty("jdbc.maxActive");
String strInitSize = prop.getProperty("jdbc.initSize");
//实例化,并初始化连接池
ds = new BasicDataSource();
ds.setDriverClassName(driverClass);
ds.setUrl(url);
ds.setUsername(user);
ds.setPassword(password);
ds.setMaxActive(Integer.parseInt(strMaxActive));
ds.setInitialSize(Integer.parseInt(strInitSize));
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("读取属性文件错误",e);
}
}
//2.创建连接
public static Connection getConnection() throws SQLException{
return ds.getConnection();
}
//3.关闭连接
public static void close(Connection conn){
if(conn !=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("关闭连接错误!",e);
}
}
}
//测试
public static void main(String[] args) throws SQLException {
Connection conn = getConnection();
System.out.println(conn.getClass().getName());
System.out.println(conn);
close(conn);
}
}
运行程序可以看到成功通过DBCP获取到数据库连接信息!