当前位置 : 主页 > 编程语言 > java >

数据库连接池入门(c3p0、Druid)

来源:互联网 收集:自由互联 发布时间:2022-06-22
@toc 概念 数据库连接池其实就是一个容器(集合),存放数据库连接的容器。当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对

@toc

概念

数据库连接池其实就是一个容器(集合),存放数据库连接的容器。当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。

好处

  • 节约资源
  • 用户访问高效

    实现

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

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

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

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

    C3P0:数据库连接池技术

    步骤:

  • 导入jar包 (两个)

    <!--c3p0连接池--> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.5</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>mchange-commons-java</artifactId> <version>0.2.19</version> </dependency>
  • 定义配置文件:名称: c3p0.properties 或者 c3p0-config.xml路径:直接将文件放在resource目录下即可。配置文件案例如下:

    <c3p0-config> <!-- 使用默认的配置读取连接池对象 --> <default-config> <!-- 连接参数 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/db4</property> <property name="user">root</property> <property name="password">root</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/db3</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>
  • 创建核心对象 数据库连接池对象 ComboPooledDataSource
  • 获取连接: getConnection代码:
  • public static void main(String[] args) throws SQLException {//1. 创建数据库连接池对象,使用默认配置DataSource ds = new ComboPooledDataSource();

    //2.获取连接 for (int i = 1; i <= 11; i++) { Connection conn = ds.getConnection(); System.out.println(i + ":" + conn); if (i == 5) { conn.close();//归还连接到连接池中 } } //testNamedConfig();

    }

    public static void testNamedConfig() throws SQLException {// 1.1 获取DataSource,使用指定名称配置DataSource ds = new ComboPooledDataSource("otherc3p0");//2.获取连接for (int i = 1; i <= 10; i++) {Connection conn = ds.getConnection();System.out.println(i + ":" + conn);}}

    ## Druid:数据库连接池实现技术,由阿里巴巴提供的 ### 步骤 1. 导入jar包 ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.8</version> </dependency>
  • 定义配置文件:是properties形式的可以叫任意名称,可以放在任意目录下
  • 加载配置文件。Properties
  • 获取数据库连接池对象:通过工厂来来获取  DruidDataSourceFactory
  • 获取连接:getConnection代码:

    //3.加载配置文件(在resource目录下) 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();

    定义工具类

  • 定义一个类 JDBCUtils
  • 提供静态代码块加载配置文件,初始化连接池对象
  • 提供方法
    • 获取连接方法:通过数据库连接池获取连接
    • 释放资源
    • 获取连接池的方法
  • 代码:

    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){ /* if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close();//归还连接 } catch (SQLException e) { e.printStackTrace(); } }*/ 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; } }

    本文内容到此结束了, 如有收获欢迎点赞

    网友评论