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

    Java--JDBC数据库连接池

    博客说明

    文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!

    概念

    其实就是一个容器(集合),存放数据库连接的容器。

    当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。

    好处

    节约资源

    用户访问高效

    实现

    标准接口:DataSource javax.sql包下的

    • 获取连接:getConnection()
    • 归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接

    一般我们不去实现它,有数据库厂商来实现

    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

    代码
    //1.创建数据库连接池对象
     DataSource ds  = new ComboPooledDataSource();
     //2. 获取连接对象
     Connection conn = ds.getConnection();
    

    Druid

    数据库连接池实现技术,由阿里巴巴提供的

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

    代码

     //3.加载配置文件
     Properties pro = new Properties();
     InputStream is =   DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
     pro.load(is);
     //4.获取连接池对象
     DataSource ds = DruidDataSourceFactory.createDataSource(pro);
     //5.获取连接
     Connection conn = ds.getConnection();
    
    定义工具类
    1. 定义一个类 JDBCUtils
    2. 提供静态代码块加载配置文件,初始化连接池对象
    3. 提供方法
      1. 获取连接方法:通过数据库连接池获取连接
      2. 释放资源
      3. 获取连接池的方法
      4. 代码
    public class JDBCUtils {
      //1.定义成员变量 DataSource
        private static DataSource ds;
    
        static {
            try {
                //1.加载配置文件
                Properties pro = new Properties();
                pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
                //2.获取DataSource
                ds = DruidDataSourceFactory.createDataSource(pro);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 获取连接
         */
        public static Connection getConnection() throws SQLException {
            return ds.getConnection();
        }
    
        /**
         * 释放资源
         */
        public static void close(Statement stmt, Connection conn) {
            close(null, stmt, conn);
        }
    
        public static void close(ResultSet rs, Statement stmt, Connection conn) {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
            if (conn != null) {
                try {
                    conn.close();//归还连接
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 获取连接池方法
         */
    
        public static DataSource getDataSource() {
            return ds;
        }
    }		    
    

    感谢

    黑马程序员

    以及勤劳的自己

    关注公众号: 归子莫,获取更多的资料,还有更长的学习计划

  • 相关阅读:
    java学习笔记-设计模式12(组合模式)
    Java神奇的装箱与拆箱
    博客得不到搜索引擎的收录!
    Java中E、T、K、V、N的含义
    【转】解决Ubuntu下Sublime Text 3无法输入中文
    【转】Windows和Ubuntu双系统,修复UEFI引导的两种办法
    30分钟学会正则表达式
    推荐一个android各种工具的墙内下载网站
    如何为Android Studio 添加快速启动方式【Linux】
    Linux 更改用户环境变量和所有用户环境变量
  • 原文地址:https://www.cnblogs.com/guizimo/p/13140334.html
Copyright © 2011-2022 走看看