mysql常用的数据库连接池及用法

 

一.什么是数据连接池

1.什么是连接池 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们 采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交 给了连接池. 

2.连接池的好处 用池来管理Connection,这样可以重复使用Connection。 当使用完Connection后,调用Connection的 close()方法也不会真的关闭Connection,而是把Connection“归还”给池。

二.常见的数据库连接池有哪些?

Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。 这样应用程序可以方便的切换不同厂商的连接池! 常见的连接池有 DBCP连接池, C3P0连接池, Druid连接池.

 

三.DBCP连接池的用法

1.DBCP连接池

   DBCP也是一个开源的连接池,是Apache成员之一,在企业开发中也比较常见,tomcat内置的连接池。

  1. 需要在项目添加文件夹放入jar包,然后再idea添加依赖,就可以使用了。(末尾提供jar包和配置的云盘地址)

 

                                       mysql常用的数据库连接池及用法

         2.在src目录下新建utils包,然后编写DBCP帮助类。

package utils;

 

IMPORT org.apache.commons.dbcp.BasicDataSource;

 

IMPORT java.sql.Connection;

IMPORT java.sql.ResultSet;

IMPORT java.sql.SQLException;

IMPORT java.sql.Statement;

 

public class DBCPUtils {

 

    //1.定义常量 保存数据库连接的相关信息

public static final STRING DRIVERNAME = "com.mysql.jdbc.Driver";

//填写自己电脑的

public static final STRING URL = "jdbc:mysql://localhost:3306/test01?characterEncoding=UTF-8";

//填写自己电脑的

public static final STRING USERNAME = "root";

//填写自己电脑的

    public static final STRING PASSWORD = "123456";

 

    //2.创建连接池对象 (有DBCP提供的实现类)

    public static BasicDataSource dataSource = NEW BasicDataSource();

 

    //3.使用静态代码块进行配置

    static{

        dataSource.setDriverClassName(DRIVERNAME);

        dataSource.setUrl(URL);

        dataSource.setUsername(USERNAME);

        dataSource.setPassword(PASSWORD);

        dataSource.setMaxActive(20);

    }

 

    //4.获取连接的方法

    public static CONNECTION getConnection() throws SQLEXCEPTION {

 

        //从连接池中获取连接

        CONNECTION CONNECTION = dataSource.getConnection();

        RETURN CONNECTION;

    }

 

    //5.释放资源方法

    public static void CLOSE(CONNECTION con, Statement statement){

 

        IF(con != NULL && statement != NULL){

            try {

                statement.close();

                //归还连接

                con.close();

            } catch (SQLEXCEPTION e) {

                e.printStackTrace();

            }

        }

 

    }

 

    public static void CLOSE(CONNECTION con, Statement statement, ResultSet resultSet){

 

        IF(con != NULL && statement != NULL && resultSet != NULL){

            try {

                resultSet.close();

                statement.close();

                //归还连接

                con.close();

            } catch (SQLEXCEPTION e) {

                e.printStackTrace();

            }

        }

 

    }

 

}

 

 

       3.在src 新建一个test包,之后在包下,新建一个TestDBCP类。

package test;

import utils.DBCPUtils;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

 

public class TestDBCP {

 

    /*

    * 测试DBCP连接池

    * */

    public static void main(String[] args) throws SQLException {

 

        //1.从DBCP连接池中拿到连接

        Connection con = DBCPUtils.getConnection();

 

        //2.获取Statement对象

        Statement statement = con.createStatement();

 

        //3.查询所有员工的姓名

        String sql = "select ename from employee";

        ResultSet resultSet = statement.executeQuery(sql);

 

        //4.处理结果集

        while(resultSet.next()){

            String ename = resultSet.getString("ename");

            System.out.println("员工姓名: " + ename);

        }

 

        //5.释放资源

        DBCPUtils.close(con,statement,resultSet);

    }

 

}

 

 

四.C3P0连接池用法

  1. C3P0是一个开源的JDBC连接池,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、 Spring等。

     2.需要在项目需要添加配置文件。然后在添加jar包,添加完jar包,为jar包添加依赖,就可以使用了。(末尾提供jar包和配置的云盘地址)

                                                 mysql常用的数据库连接池及用法

        3.在src目录下新建utils包,然后编写C3P0帮助类。

package utils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class C3P0Utils {

 

    //1.创建连接池对象 C3P0对DataSource接口的实现类

    //使用的配置是 配置文件中的默认配置

    //public static ComboPooledDataSource dataSource = new ComboPooledDataSource();

    //使用指定的配置

    public static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql");

    //获取连接的方法

    public static Connection getConnection() throws SQLException {

 

        return dataSource.getConnection();

    }

    //释放资源

    public static void close(Connection con, Statement statement){

        if(con != null && statement != null){

            try {

                statement.close();

                //归还连接

                con.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

 

    }

    public static void close(Connection con, Statement statement, ResultSet resultSet){

 

        if(con != null && statement != null && resultSet != null){

            try {

                resultSet.close();

                statement.close();

                //归还连接

                con.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

 

    }

}

 

            4.配置文件

<c3p0-config>

  

  <!--默认配置-->

    <default-config>  

<!-- initialPoolSize:初始化时获取三个连接,

  取值应在minPoolSize与maxPoolSize之间。 --> 

        <property name="initialPoolSize">3</property>  

 

<!-- maxIdleTime:最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。-->

        <property name="maxIdleTime">60</property>  

 

<!-- maxPoolSize:连接池中保留的最大连接数 -->

        <property name="maxPoolSize">100</property>  

<!-- minPoolSize: 连接池中保留的最小连接数 -->

        <property name="minPoolSize">10</property>  

 

    </default-config>  

  

   <!--配置连接池mysql可填写自己电脑对应的-->

 

    <named-config name="mysql">

        <property name="driverClass">com.mysql.jdbc.Driver</property>

        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test01?characterEncoding=UTF-8</property>

        <property name="user">root</property>

        <property name="password">123456</property>

        <property name="initialPoolSize">10</property>

        <property name="maxIdleTime">30</property>

        <property name="maxPoolSize">100</property>

        <property name="minPoolSize">10</property>

    </named-config>

    <!--配置连接池2,可以配置多个-->

 

</c3p0-config>

        5.在src 新建一个test包,之后在包下,新建一个TestD3P0类。

package test;

import  utils.C3P0Utils;

import java.sql.*;

public class TestC3P0 {

 

    //需求 查询姓名为李白的 记录

    public static void main(String[] args) throws SQLException {

 

        //1.获取连接

        Connection con = C3P0Utils.getConnection();

 

        //2.获取预处理对象

        String sql = "select * from employee where ename = ?";

        PreparedStatement ps = con.prepareStatement(sql);

 

        //3.设置占位符的值

        ps.setString(1,"李白");

        ResultSet resultSet = ps.executeQuery();

 

        //4.处理结果集

        while(resultSet.next()){

            int eid = resultSet.getInt("eid");

            String ename = resultSet.getString("ename");

            int age = resultSet.getInt("age");

            String sex = resultSet.getString("sex");

            double salary = resultSet.getDouble("salary");

            Date date = resultSet.getDate("empdate");

 

            System.out.println(eid +" " + ename + " " + age +" " + sex +" " + salary +" " +date);

        }

 

        //5.释放资源

        C3P0Utils.close(con,ps,resultSet);

    }

 

}

 

 

五.Druid连接池

  1. Druid(德鲁伊)是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是目前最好的数据库连接池。在功 能、性能、扩展性方面,都超过其他数据库连接池,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况。
  2. 导入jar包和配置文件(末尾提供jar包和配置的云盘地址)

                                           mysql常用的数据库连接池及用法

 

         3.配置文件,可以根据自己电脑,进行配置.

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://127.0.0.1:3306/test01?characterEncoding=UTF-8 

username=root

password=123456

initialSize=5

maxActive=10

maxWait=3000

          4.在src目录下新建utils包,然后编写C3P0帮助类。

 

package utils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class C3P0Utils {

 

    //1.创建连接池对象 C3P0对DataSource接口的实现类

    //使用的配置是 配置文件中的默认配置

    //public static ComboPooledDataSource dataSource = new ComboPooledDataSource();

 

    //使用指定的配置

    public static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql");

 

    //获取连接的方法

    public static Connection getConnection() throws SQLException {

 

        return dataSource.getConnection();

    }

 

    //释放资源

    public static void close(Connection con, Statement statement){

 

 

        if(con != null && statement != null){

            try {

                statement.close();

                //归还连接

                con.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

 

    }

 

    public static void close(Connection con, Statement statement, ResultSet resultSet){

 

        if(con != null && statement != null && resultSet != null){

            try {

                resultSet.close();

                statement.close();

                //归还连接

                con.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

 

    }

}

 

        5.在src 新建一个test包,之后在包下,新建一个TestDruid类。

package test;

import com.lagou.utils.DruidUtils;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

 

public class TestDruid {

 

    // 需求 查询 薪资在3000 到 5000之间的员工的姓名

    public static void main(String[] args) throws SQLException {

 

        //1.获取连接

        Connection con = DruidUtils.getConnection();

 

        //2.获取Statement对象

        Statement statement = con.createStatement();

 

        //3.执行查询

        ResultSet resultSet = statement.executeQuery("select ename from employee where salary between 3000 and 5000");

 

        //4.处理结果集

        while(resultSet.next()){

            String ename = resultSet.getString("ename");

            System.out.println(ename);

        }

 

        //5.释放资源

        DruidUtils.close(con,statement,resultSet);

    }

 

}

 

 

本项目需要的jar包和配置文件

云盘地址:https://pan.baidu.com/s/1JIIMrfIn1W4ER2wtZuE0EA

提取码:hhxy

 注释:搞不定的可与博主交流