JDBC数据库连接池

发布时间:2024年01月19日

数据库连接池

  • 概述:简单理解,就是一个容器(集合),存放数据库连接对象(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 包

文章来源:https://blog.csdn.net/weixin_45754463/article/details/135687281
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。