开发中经常遇到使用c3p0技术和Druid技术建立的工具类JDBCUtils, 下面将对这两种技术进行简单的介绍.
java程序与数据库数据交互的步骤
1. 首先需要与数据库建立连接, 即完成驱动注册.
2. 导入c3p0和Druid的jar包, 编写工具类JDBCUtils.
3. 导入JdbcTemplate的jar包, 使用JdbcTemplate创建的对象完成数据交互.
c3p0连接池技术
c3p0的配置文件
c3p0技术编写工具类JDBCUtils
c3p0技术创建连接池对象可以直接通过实现接口的DataSource类CombopooledDataSource来实现, 在JDBCUtils类中提供了获取连接池对象, 连接对象以及关闭流资源的公共访问方法.
public class JDBCUtil_c3po {
// 创建唯一的一个连接池对象
private static DataSource ds = new ComboPooledDataSource();
// 获取连接池对象的方法
public static DataSource getDataSource(){
return ds;
}
// 获取连接对象的方法
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
// 关闭流资源
public static void close(ResultSet rs, Connection conn, Statement...stmts){
if (rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmts != null && stmts.length != 0){
for (Statement stmt : stmts) {
if (stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
阿里巴巴的Druid技术
Druid技术
Druid的配置文件使用的是properties文件, 所以说配置上比较简单; 而c3p0技术配置文件使用的是xml文件, 虽然看起来比较复杂, 但是xml文件可以实现更多的逻辑判断, 并且可以添加一些约束条件, 所以说比较正规的软件往往使用xml文件作为配置文件.
Druid技术编写工具类JDBCUtils
使用Druid技术完成工具类JDBCUtils的编写, 配置文件druid.properties是需要自己加载的, 然后调用DruidDataSourceFactory中的方法createDataSource方法创建连接池对象, 至于后面提供获取连接池对象, 连接对象以及关闭流资源的公共访问方法和c3p0技术是一样的.
public class JDBCUtils {
// 1.获取一个唯一的连接池对象,
private static DataSource ds;
// 2. 通过动态代码块完成对连接池对象的赋值
static{
try {
// 2.1 创建Properties对象, 用于读取Druid技术连接池对象的配置文件
Properties pro = new Properties();
// 2.2 通过类加载器, 加载配置文件
pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
// 2.3 对连接池对象进行赋值
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取连接池对象的方法
public static DataSource getDataSource(){
return ds;
}
// 获取连接对象的方法
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
// 关闭流资源的方法
public static void close(ResultSet rs, Connection conn, Statement...stmts){
if (rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmts != null && stmts.length != 0){
for (Statement stmt : stmts) {
if (stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
以上是个人在使用c3p0技术和Druid技术创建连接池对象时总结的差异, 供交流学习.