zoukankan      html  css  js  c++  java
  • 数据库连接池

    数据库连接池

    1. 概念

    数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。(来自:百度百科数据库连接池)。实质上,数据库连接池,就是一个用来存放数据库连接(Connection)的容器(集合),当系统初始化后,容器就会被创建,并且申请号一些数据库连接存放在容器中,当用户访问数据库时,从容器中获取数据库连接,访问完之后,就会归还连接对象给容器。

    2. 好处

    1. 节约资源
    2. 提高访问数据库效率

    3. 实现

    1. 标准接口:java.sql.DataSource接口
      1. 方法:
        • 该接口有一个方法用来获取连接:getConnection()
        • 归还连接对象:如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法来归还。(注意:在这种技术下,不是关闭连接而是归还连接)
    2. 该接口一般不用程序员自己实现,可以使用数据库厂商的实现,有两种主要的数据库连接池技术
      1. C3P0:数据库连接池技术
      2. Druid:Alibaba提供的数据库连接池技术

    4. C3P0

    步骤:

    1. 导入jar包:c3p0-0.9.5.2.jar 以及mchange-commons-java-0.2.12.jar,同时由于要连接数据库,不要忘了打入驱动jar包
    2. 定义配置文件:
      • 文件名:c3p0.properties or c3p0-config.xml,将文件名定义为这两个,会自动寻找这两个名字的文件
      • 直接文件放置于scr目录下即可
    3. 创建核心对象,也就是数据库连接池对象:ComboPooledDataSource对象
    4. 获取连接:getConnection()

    C3P0Demo

    package cn.zhuobo.dataSource;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.SQLException;
    
    public class C3P0Demo02 {
        public static void main(String[] args) throws SQLException {
    
            // 默认版本的数据库连接池,ComboPooledDataSource()没有参数
            /*DataSource dataSource = new ComboPooledDataSource();
    
            for (int i = 0; i < 11; i++) {
                Connection connection = dataSource.getConnection();
    
                System.out.println(i + ":" + connection);
                if(i == 3) {
                    connection.close();// 归还连接
                }
            }*/
            testNamedConfig();
        }
    
    
        //这是另一个版本的数据库连接池,带有参数,查看配置文件可以知道,该连接池的最大连接对象为8
        // ComboPooledDataSource()有参数
        public static void testNamedConfig() throws SQLException {
            DataSource dataSource1 = new ComboPooledDataSource("otherc3p0");
    
            for (int i = 0; i < 9; i++) {
                Connection connection = dataSource1.getConnection();
                System.out.println(i + ":" + connection);
            }
        }
    }
    

    5.Druid:Alibaba提供的数据库连接池技术

    使用步骤:

    1. 导入jar包:
    2. 定义配置文件:
      • 是Properties格式的
      • 可以为任意的名称,放在任意的目录下
    3. 加载配置文件 Properties文件
    4. 获取连接池对象:使用工厂类获取DruidDataSourceFactory.createDataSource(pro);
    5. 获取连接,连接池对象.getConnection();

    DruidDemo:

    package cn.zhuobo.dataSource;
    
    import com.alibaba.druid.pool.DruidDataSourceFactory;
    
    import javax.sql.DataSource;
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.util.Properties;
    
    public class DruidDemo01 {
        public static void main(String[] args) throws Exception {
            // 加载配置文件,classLoader还需要深入了解一下
            Properties pro = new Properties();
            InputStream is = DruidDemo01.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);
    
            // 获取连接池对象
            DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);
            // 获取连接对象
            Connection connection = dataSource.getConnection();
            System.out.println(connection);
        }
    }
    

    一般还是自己定义一个工具类,用来加载配置文件,初始化连接池,释放资源等

    1. 定义一个类JDBCUtils
    2. 在一个静态代码块里编写加载配置文件
    3. 方法:
      1. 获取连接的方法::通过数据库连接池获取连接
      2. 释放资源的方法
      3. 获取连接池的方法
  • 相关阅读:
    表单提交原来是这句 return啊
    jquery控制table列.rar
    iframe 大数据量传参 本地能调用远程页面 不存在跨域问题 js组件调用原理
    public string GetUrltoHtml(string Url)
    一个xml转html的小程序 别人一个毕业设计【难度:简单】
    铭万轮换广告组件
    C#操作 ini文件类【转】
    捕捉浏览器的刷新与关闭 兼容ie、ff(火狐)
    列表循环 float:left marginright:10px 如何对齐右边距小技巧
    access 双表连接代码
  • 原文地址:https://www.cnblogs.com/zhuobo/p/10716614.html
Copyright © 2011-2022 走看看