c3p0连接池技术和Druid连接池技术比较

开发中经常遇到使用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技术创建连接池对象时总结的差异, 供交流学习.

发布了12 篇原创文章 · 获赞 0 · 访问量 3996

猜你喜欢

转载自blog.csdn.net/Peppa_Pig_0325/article/details/81571156