JDBC数据库连接池

数据库连接池

  • 概述:简单理解,就是一个容器(集合),存放数据库连接对象(Connection)的容器。
    • 当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。
    • 举例:餐厅服务员,刚开始有几人,来一个客人一个服务员接待,接待完,重新等候其他客人。
  • 好处:
    • 节约资源(可以避免用一次数据库就创建一个数据库连接对象)
    • 用户访问更高效(用户只需要从池中取出连接对象即可,不用的时候重新放回去池中即可)
  • 数据库连接池种类
    • C3P0:是一个流行的Java数据库连接池库,用于管理数据库连接。它提供了许多功能,包括连接池的管理、连接的缓存和重用、连接的超时和故障处理等
    • Druid:是一个开源的Java数据库连接池和监控库,由阿里巴巴开发和维护。它提供了高性能、高可靠性和强大的监控功能,被广泛应用于Java应用程序中

C3P0

  • 使用步骤(使用到的jar包都在文末)

    1. 导入jar包 (两个) c3p0-0.9.5.2.jar 和 mchange-commons-java-0.2.12.jar (不要忘记导入数据库驱动jar包)
    2. 定义配置文件
      • 名称:c3p0.properties 或者 c3p0-config.xml
      • 路径:将文件放在src目录下即可
    3. 创建数据库连接池对象(ComboPooledDataSource
    4. 获取连接(getConnection
    5. 归还连接(close
  • 代码示例

    • 配置文件 c3p0.properties(这里使用自己的用户和密码)
    url = jdbc:mysql://localhost:3306/test
    username = root
    password = root
    
    • Java 代码
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.Properties;
    
    public class C3P0Example {
         
    
        // 创建一个数据库连接池对象
        private static ComboPooledDataSource dataSource;
    
        // 静态代码块
        static{
         
            // 加载配置文件到内存中
            Properties pro = new Properties();
            try {
         
                pro.load(C3P0Example.class.getClassLoader().getResourceAsStream("c3p0.properties"));
            } catch (IOException e) {
         
                e.printStackTrace();
            }
            // 配置 c3p0 连接池
            dataSource = new ComboPooledDataSource();
            dataSource.setJdbcUrl(pro.getProperty("url"));
            dataSource.setUser(pro.getProperty("username"));
            dataSource.setPassword(pro.getProperty("password"));
        }
    
        public static Connection getConnection() throws SQLException {
         
            // 从连接池获取 数据库连接对象
            return dataSource.getConnection();
        }
    
        public static void main(String[] args) {
         
            Connection con = null;
            try {
         
                // 获取数据库连接对象
                con = getConnection();
                // 定义sql语句
                String sql = "SELECT * FROM account WHERE id = ?";
                // 获取执行 SQL 对象
                PreparedStatement pst = con.prepareStatement(sql);
                // 填充占位符
                pst.setInt(1,2);
                // 执行 SQL
                ResultSet rs = pst.executeQuery();
                // 输出结果
                while(rs.next()){
         
                    int id = rs.getInt(1);
                    String name = rs.getString(2);
                    double balance = rs.getDouble(3);
                    System.out.println(id+"--"+name+"--"+balance);
                }
            } catch (SQLException e) {
         
                e.printStackTrace();
            }finally {
         
                if(con != null){
         
                    try {
         
                        // 将连接返回给 连接池
                        con.close();
                    } catch (SQLException e) {
         
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

Druid

  • 使用步骤

    1. 导入 jar 包 druid-1.0.9.jar
    2. 定义配置文件 properties
    3. 加载配置文件,Properties 对象
    4. 获取数据库连接池对象:通过工厂类来获取 (DruidDataSourceFactory
    5. 获取连接(getConnection
    6. 关闭连接(close
  • 示例代码

    • 配置文件 druid.properties
    url = jdbc:mysql://localhost:3306/test
    username = root
    password = root
    
    • Java 代码
    public class DruidExample {
         
    
        // 创建一个数据库连接池对象
        private static DruidDataSource ds;
    
        // 静态代码块
        static{
         
            try {
         
                // 加载配置文件到内存中
                Properties pro = new Properties();
                InputStream is = DruidExample.class.getClassLoader().getResourceAsStream("druid.properties");
                pro.load(is);
                // 配置 druid 连接池
                ds = (DruidDataSource) DruidDataSourceFactory.createDataSource(pro);
            } catch (IOException e) {
         
                e.printStackTrace();
            } catch (Exception e) {
         
                e.printStackTrace();
            }
        }
    
        public static Connection getConnection() throws SQLException {
         
            // 从连接池获取 数据库连接对象
            return ds.getConnection();
        }
    
        public static void main(String[] args) {
         
            Connection con = null;
            try {
         
                // 获取数据库连接对象
                con = getConnection();
                // 定义sql语句
                String sql = "SELECT * FROM account WHERE id = ?";
                // 获取执行 SQL 对象
                PreparedStatement pst = con.prepareStatement(sql);
                // 填充占位符
                pst.setInt(1,2);
                System.out.println(1);
                // 执行 SQL
                ResultSet rs = pst.executeQuery();
                // 输出结果
                while(rs.next()){
         
                    int id = rs.getInt(1);
                    String name = rs.getString(2);
                    double balance = rs.getDouble(3);
                    System.out.println(id+"--"+name+"--"+balance);
                }
            } catch (SQLException e) {
         
                e.printStackTrace();
            }finally {
         
                if(con != null){
         
                    try {
         
                        // 将连接返回给 连接池
                        con.close();
                    } catch (SQLException e) {
         
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

本文使用到的 jar 包

相关推荐

  1. JDBC数据库连接

    2024-01-19 09:50:01       38 阅读
  2. JDBC数据库连接

    2024-01-19 09:50:01       11 阅读
  3. JDBC连接Mysql数据库

    2024-01-19 09:50:01       30 阅读
  4. 数据库连接】01:连接初始化

    2024-01-19 09:50:01       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-19 09:50:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-19 09:50:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-19 09:50:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-19 09:50:01       18 阅读

热门阅读

  1. MySQL查询条件OR导致模糊查询失效

    2024-01-19 09:50:01       40 阅读
  2. Linux的strace工具使用

    2024-01-19 09:50:01       34 阅读
  3. clickhouse安装及简单使用

    2024-01-19 09:50:01       43 阅读
  4. VSCode !+tab补全失效解决方法

    2024-01-19 09:50:01       39 阅读
  5. Visual Studio Code 1.67调整文件嵌套、Markdown导航

    2024-01-19 09:50:01       35 阅读
  6. 第10章 Web服务器与Ajax

    2024-01-19 09:50:01       34 阅读
  7. NodeJs 第十七章 文件上传

    2024-01-19 09:50:01       31 阅读
  8. K8S---NetworkPolicy

    2024-01-19 09:50:01       28 阅读
  9. uniapp PDF文件预览/打开

    2024-01-19 09:50:01       33 阅读
  10. 美易平台:美国零售销售数据超预期增长

    2024-01-19 09:50:01       33 阅读
  11. chatgpt和文心一言哪个更好用

    2024-01-19 09:50:01       27 阅读