数据库连接池

数据库连接池

  • 概念: 其实就是一个容器(集合),存放数据库连接的容器。当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。

  • 好处:

    1. 节约资源
    2. 用户访问高效
  • 实现:

    1. 标准接口:DataSource

      1. 方法:
        • 获取连接:getConnection()
        • 归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了,而是归还连接。
    2. 一般我们不去实现它,有数据库厂商来实现

      1. C3P0:数据库连接池技术。
      2. Druid:数据库连接池技术,由阿里巴巴提供。

C3P0:数据库连接池技术

  • 步骤:
    1. 导入jar包(两个) c3p0-0.9.5.5-sources.jar和mchange-commons-java-0.2.19-sources.jar
    2. 定义配置文件:
      • 名称:c3p0.properties或者c3p0-config.xml
      • 路径:直接将文件放在src目录下即可
    3. 创建核心对象:数据库连接池对象 ComboPooledDataSource
    4. 获取连接:getConnection

Druid:数据库连接池技术,由阿里巴巴提供

  • 步骤:

    1. 导入jar包 druid-1.1.22.jar
    2. 定义配置文件:
      • 是properties形式的
      • 可以叫任意名称,可以放在任意目录下
    3. 获取数据库连接池对象:加载配置文件,然后通过工厂来获取 DruidDataSourceFactory
    4. 获取连接:getConnection
  • 定义工具类

    1. 定义一个类 JDBCUtils
    2. 提供静态代码块加载配置文件,初始化连接池对象
    3. 提供方法:
      1. 获取连接方法:通过数据库连接池获取连接
      2. 释放资源
      3. 获取连接池对象的方法
  • 代码实现示例

        public class JDBCUtils {
    
        private static DataSource ds;
    
        //数据库连接池的初始化
        static {
            try {
                Properties prop = new Properties();
                prop.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
                ds = DruidDataSourceFactory.createDataSource(prop);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        //获取连接的方法
        public static Connection getConnection() throws SQLException {
            return ds.getConnection();
        }
    
        //释放资源的方法
        public static void close(Connection conn, Statement st, ResultSet rs) {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (st != null) {
                try {
                    st.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    
        //释放资源的方法
        public static void close(Connection conn, Statement st) {
            close(conn, st, null);
        }
    
        //获取连接池对象的方法
        public static DataSource getDataSource() {
            return ds;
        }
    
    }

Spring JDBC

  • Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发。

  • 步骤:

    1. 导入jar包。
    2. 创建JDBCTemplate对象。依赖于数据源DataSource。
    3. 调用DBCTemplate来完成增删改查的操作。
      • update():执行DML语句。
      • queryForMap():查询结果将结果集封装为Map集合,将一条记录封装为Map集合。
        • 注意:这个方法查询的结果集长度只能是1。
      • queryForList():查询结果将结果集封装为List集合。
        • 注意:将每一条记录封装为Map集合,再将map集合装载到List集合中。
      • query():查询结果将结果封装为JavaBean对象。
        • 参数:RowMapper
          • 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
          • new BeanPropertyRowMapper<类型>(类型.class)
      • queryForObject():查询结果将结果封装为对象。
        • 一般用于聚合函数的查询。
        • queryForObject(sql语句, 返回值类型.class);
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信