• 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(),可以说是被加工了,功能是将连接对象放回到池中,而不是释放掉。

  • 相关阅读:
    VC(VISUAL_C++)虚拟键VK值列表
    关于新一轮QQ Tencent://Message 在线联系
    (记录) sql exists 应用及 order by注意点
    (记录)IE8 ..样式错乱解决
    jquery 关于ajax 中文字符长度过长后不执行
    DataList 嵌套绑定CheckBoxList [记录, 以免忘记哈.]
    (记录)MSSQL 的一些应用 查询数据统计适用 添加月份日号作为行记录
    数据结构回顾算法
    Modeling Our World笔记
    数据结构2数组
  • 原文地址:https://www.cnblogs.com/dcy521/p/14732864.html
Copyright © 2020-2023  润新知