zoukankan      html  css  js  c++  java
  • Java -- JDBC学习笔记8、连接池

    1、Druid连接池

    在程序初始化时,预先创建指定数量的数据库连接对象存储在池中,当需要连接数据库时,从连接池中取出,现有连接使用完毕后,也不会进行关闭,而是放回池中实现复用,节省资源.

    1.1、Druid连接池使用步骤

    • 在项目的lib文件夹里添加druid.jar文件
    • 创建database.properties文件
    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/StudentManage?characterEncoding=utf-8&useSSL=false
    username=root
    password=root
    #初始化连接数
    initialSize=10
    #最大连接数量
    maxActive=50
    #最小连接数量
    minIdle=5
    #超时等待时间以毫秒为单位
    maxWait=3000
    
    • 连接池工具类
    public class DBUtils
    {
        //声明连接池对象
        private static DruidDataSource ds;
    
        static
        {
            Properties properties = new Properties();
            try
            {
                //加载配置文件
                properties.load(DBUtils.class.getResourceAsStream("/database.properties"));
                //使用DruidDataSourceFactory创建连接池.createDataSource(),参数类型是Properties
                ds = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            catch (Exception exception)
            {
                exception.printStackTrace();
            }
        }
    
        /**
         * 从池中获取连接对象
         * @return 连接对象
         */
        public static Connection getConnection()
        {
            try
            {
                return ds.getConnection();
            }
            catch (SQLException sqlException)
            {
                sqlException.printStackTrace();
            }
            return null;
        }
    }
    
    • 在main方法中测试,每次调用后就放回池中
    for (int i = 0; i < 10; i++)
            {
                Connection conn = DBUtils.getConnection();
                System.out.println(conn);
                //将连接对象放回到池中
                conn.close();
            }
    
    • 结果:
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    

    可以看到、用的都是一个对象,每次用完都放回到池中,下次用就再取,节省资源、实现复用。

    • 注:这里边的conn.close()和Connection中close()不一样,不是释放资源,因为这里获取的conn是从连接池中获取的,在ds.getConnection()中按Ctrl键在getConnection()上边点击鼠标左键查看源码,可以看到一下代码:
    public DruidPooledConnection getConnection() throws SQLException {
            return this.getConnection(this.maxWait);
        }
    
    • 以同样方法再点击DruidPooledConnection可以看到:
    public class DruidPooledConnection extends PoolableWrapper implements PooledConnection, Connection {
        //........
    }
    

    可以看到、DruidPooledConnection实现了Connection接口,而以上循环中使用的conn.close()就是这里边的close(),可以说是被加工了,功能是将连接对象放回到池中,而不是释放掉。

  • 相关阅读:
    linux 常用命令
    ubuntu 安装在硬盘与配置
    linux管道符、重定向与环境变量
    linux用户身份与文件权限
    centos开启ftp服务
    js实现常见排序算法
    算法分析
    Vim
    CSS的3种使用方法
    cookie 在登录时的存储,获取,清除
  • 原文地址:https://www.cnblogs.com/dcy521/p/14732864.html
Copyright © 2011-2022 走看看