数据库连接池(c3p0和德鲁伊)

目录

连接池介绍

c3p0连接池

传统方法引入jar包

配置文件

德鲁伊连接池

德鲁伊工具类


传统jdbc数据库使用DriverManger来获取,每次向数据库建立连接需要将Connection加载到内存中,频繁的操作会造成占用很多系统资源,造成服务器崩溃,每次连接完如果程序出现异常会造成数据泄露,所以我们采用数据库连接池技术

连接池介绍

1.预先在缓存池中放入一定数量的连接,当需要建立数据库时,只需将缓存池中取出一个,使用完毕后再放回

2.数据据库连接池负责分配,管理和释放数据库连接,他允许应用程序重复使用一个现有的数据库连接,而不是建立一个

3.当应用程序向连接池请求的连接超过最大连接数量时,这些请求将被加入到等待队列中

c3p0连接池

速度较慢,但稳定性好

传统方法引入jar包

java 复制代码
public void testC3P0_01() throws Exception {
 
        //1. 创建一个数据源对象
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
        //2. 通过配置文件mysql.properties 获取相关连接的信息
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\mysql.properties"));
        //读取相关的属性值
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String url = properties.getProperty("url");
        String driver = properties.getProperty("driver");
 
        //给数据源 comboPooledDataSource 设置相关的参数
        //注意:连接管理是由 comboPooledDataSource 来管理
        comboPooledDataSource.setDriverClass(driver);
        comboPooledDataSource.setJdbcUrl(url);
        comboPooledDataSource.setUser(user);
        comboPooledDataSource.setPassword(password);
 
        //设置初始化连接数
        comboPooledDataSource.setInitialPoolSize(10);
        //最大连接数
        comboPooledDataSource.setMaxPoolSize(50);    
        Connection connection = comboPooledDataSource.getConnection(); //这个方法就是从 DataSource 接口实现的
        connection.close(); 
}

配置文件

java 复制代码
 public void testC3P0_02() throws SQLException {
 
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource("db");
        Connection connection = comboPooledDataSource.getConnection();
        connection.close();
}

德鲁伊连接池

是阿里提供的数据库连接池,集dbcp,c3p0,proxool优点于一身

java 复制代码
public void testDruid() throws Exception {
        //1. 加入 Druid jar包
        //2. 加入 配置文件 druid.properties , 将该文件拷贝项目的src目录
        //3. 创建Properties对象, 读取配置文件
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\druid.properties"));
 
        //4. 创建一个指定参数的数据库连接池, Druid连接池
        DataSource dataSource =
                DruidDataSourceFactory.createDataSource(properties);
            Connection connection = dataSource.getConnection();
            connection.close();
}

德鲁伊工具类

将数据库进行封装处理

java 复制代码
public class JDBCUtilsByDruid {
 
    private static DataSource ds;
 
    //在静态代码块完成 ds初始化
    static {
        Properties properties = new Properties();
        try {
            properties.load(new FileInputStream("src\\druid.properties"));
            ds = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
 
    //编写getConnection方法
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
 
    public static void close(ResultSet resultSet, Statement statement, Connection connection) {
 
        try {
            if (resultSet != null) {
                resultSet.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}
相关推荐
阿猿收手吧!3 分钟前
【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}
数据库·redis·缓存
奈葵6 分钟前
Spring Boot/MVC
java·数据库·spring boot
leegong2311115 分钟前
Oracle、PostgreSQL该学哪一个?
数据库·postgresql·oracle
中东大鹅20 分钟前
MongoDB基本操作
数据库·分布式·mongodb·hbase
夜光小兔纸42 分钟前
Oracle 普通用户连接hang住处理方法
运维·数据库·oracle
兩尛2 小时前
订单状态定时处理、来单提醒和客户催单(day10)
java·前端·数据库
web2u2 小时前
MySQL 中如何进行 SQL 调优?
java·数据库·后端·sql·mysql·缓存
Elastic 中国社区官方博客3 小时前
使用 Elasticsearch 导航检索增强生成图表
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
小金的学习笔记3 小时前
RedisTemplate和Redisson的使用和区别
数据库·redis·缓存
新知图书4 小时前
MySQL用户授权、收回权限与查看权限
数据库·mysql·安全