• java JDBC数据库连接池技术(Druid ,c3p0)


    java JDBC数据库连接池技术

    为什么使用数据库连接池?

    这个原因与为什么使用线程池有点相似,都是为了提高资源的利用率,减少申请时间的浪费,提高程序的运行效率。
    数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数
    据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统
    无尽的与数据库连接。

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    数据库连接池的优点:

    1.1 资源的重用
    数据库连接池中的连接可以重复使用,避免频繁的创建,大大减少了性能的开销,即减少了系统的消耗,也增加了系统环境运行的平稳性
    1.2提高系统的反应速度
    s数据库连接池在初始化的过程中,往往已经创建了若干数据库连接置于连接池中备用,在由业务要使用的时候可以直接拿来使用,避免了初始化和释放过程的时间开销,从而减少了系统的响应时间
    1.3新的资源分配手段
    当多个应用共用一个数据库的时候,可以在应用层通过数据库连接池的配置,实现某一应用最大数据库连接数的限制,避免某一应用占用过多的资源
    1.4统一连接管理,避免数据库的连接泄露
    数据库连接池中可设置超时占用设定,强制收回被占用的连接,避免常规数据库连接操作中可能出现的资源泄露

    两种数据库连接池技术 C3P0 Druid

    C3P0 是一个开源组织提供的一个数据库连接池,速度相对较慢,稳定性还可以。hibernate官方推荐使用

    Druid 是阿里提供的数据库连接池,据说是集DBCP 、C3P0 、Proxool 优点于一身的数据库连接池,但是速度不确定是否有BoneCP快,据说是目前最吊的数据库连接池之一

    在这里插入图片描述

    c3p0的使用

    *** 步骤:**
    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
    

    配置文件:

    <c3p0-config>
      <!-- 使用默认的配置读取连接池对象 -->
      <default-config>
      	<!--  连接参数 -->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3309/db2</property>
        //数据库用户名
        <property name="user">root</property>
        //密码
        <property name="password">1234</property>
        
        <!-- 连接池参数 -->
        //初始化连接数
        <property name="initialPoolSize">5</property>
        //最大连接数
        <property name="maxPoolSize">10</property>
        //最长的超时连接时间
        <property name="checkoutTimeout">3000</property>
      </default-config>
    //自己定义的配置
      <named-config name="otherc3p0"> 
        <!--  连接参数 -->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/day25</property>
        <property name="user">root</property>
        <property name="password">root</property>
        
        <!-- 连接池参数 -->
        <property name="initialPoolSize">5</property>
        <property name="maxPoolSize">8</property>
        <property name="checkoutTimeout">1000</property>
      </named-config>
    </c3p0-config>
    

    java代码

    package JDBC;
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    public class C3P0 {
        public static void main(String[] args) throws SQLException {
            //创建数据库连接池
            DataSource ds  = new ComboPooledDataSource();
            //获取连接对象
            Connection connection = ds.getConnection();
            //定义sql语句
            String sql="update count set money=0";
            //获取statement对象
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            //执行
            int i = preparedStatement.executeUpdate();
            System.out.println(i);
            //关闭statement,归还connection
            preparedStatement.close();
            connection.close();
        }
    }
    

    Druid的使用

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

    配置文件

    driverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql://127.0.0.1:3309/db2
    username=root
    password=1234
    //初始化连接数
    initialSize=5
    //最大连接数
    maxActive=10
    //最长等待时间
    maxWait=3000
    

    工具类

    package JDBC;
    import com.alibaba.druid.pool.DruidDataSourceFactory;
    import javax.sql.DataSource;
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    public class DruidUtils {
        private static DataSource dataSource=null;
    //获取数据库连接池
        public static DataSource getDataSource() {
            return dataSource;
        }
        //关闭statement,归还connection
        public static  void close(Statement statement, Connection connection){
            if (statement!=null){
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection!=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public static void setDataSource(DataSource dataSource) {
            DruidUtils.dataSource = dataSource;
        }
    
        static {
            try {
                //加载配置文件经内存
                Properties properties = new Properties();
                InputStream resourceAsStream = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
                properties.load(resourceAsStream);
                 dataSource = DruidDataSourceFactory.createDataSource(properties);
            } catch (IOException e) {
                System.out.println(e);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        public static  Connection getConnection() throws SQLException {
            return  dataSource.getConnection();
        }
    }
    

    主函数

    package JDBC;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    public class Druid {
        public static void main(String[] args) throws SQLException {
            //获取连接对象
            Connection connection = DruidUtils.getConnection();
            //定义sql执行语句
            String sql="update count set money=10";
            //获取statement对象
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            //执行语句
            preparedStatement.executeUpdate();
            //关闭
            DruidUtils.close(preparedStatement,connection);
        }
    }
    

    以上就是jdbc数据库连接池技术的一些基础知识,如有错误还请各位批评指正,喜欢我的文章可以点赞关注,谢谢

    在这里插入图片描述

  • 相关阅读:
    lintcode:Flip Bits 将整数A转换为B
    lintcode:strStr 字符串查找
    lintcode:Subtree 子树
    lintcode 容易题:Partition Array by Odd and Even 奇偶分割数组
    lintcode:在二叉查找树中插入节点
    lintcode:在O(1)时间复杂度删除链表节点
    lintcode:哈希函数
    lintcode:合并排序数组 II
    lintcode:合并排序数组
    lintcode:数飞机
  • 原文地址:https://www.cnblogs.com/pjhaymy/p/13389524.html
Copyright © 2020-2023  润新知