【JDBC】DBCP连接池

一、DBCP连接池

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

创建项目 导入 jar包

将这两个 jar包添加到 myJar文件夹中 (jar包在资料里的软件文件夹中)在这里插入图片描述

1. 编写工具类

连接数据库表的工具类, 采用DBCP连接池的方式来完成
Java中提供了一个连接池的规则接口 : DataSource , 它是java中提供的连接池
在DBCP包中提供了DataSource接口的实现类,我们要用的具体的连接池 BasicDataSource

1.1 工具类实例:

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 {
    
    
    /**
     * 将连接信息定义为字符串常量
     */
    /**
     * 驱动类
     */
    public static final String DRIVERNAME = "com.mysql.jdbc.Driver";
    /**
     * URL
     */
    public static final String URL = "jdbc:mysql://localhost:3306/db?characterEncoding=UTF-8";
    /**
     * 数据库账号
     */
    public static final String USER = "root";
    /**
     * 数据库密码
     */
    public static final String PASSWORD = "root";


    /**
     * 创建连接池对象 (有DBCP提供的实现类)
     */
    public static BasicDataSource dataSource = new BasicDataSource();

    /**
     * 使用静态代码块进行配置
     */
    static {
    
    
        dataSource.setDriverClassName(DRIVERNAME);
        dataSource.setUrl(URL);
        dataSource.setUsername(USER);
        dataSource.setPassword(PASSWORD);
    }

    /**
     * 获取连接的方法
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
    
    
        return dataSource.getConnection();
    }

    /**
     * 释放资源方法
     * @param con
     * @param statement
     */
    public static void close(Connection con, Statement statement){
    
    
        if(con != null && statement != null){
    
    
            try {
    
    
                statement.close();
                //归还连接
                con.close();
            } catch (SQLException e) {
    
    
                e.printStackTrace();
            }
        }
    }

    /**
     * 释放资源方法
     * @param con
     * @param statement
     * @param resultSet
     */
    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();
            }
        }
    }
}

常见配置项

属性 描述
driverClassName 数据库驱动名称
url 数据库地址
username 用户名
password 密码
maxActive 最大连接数量
maxIdle 最大空闲连接
minIdle 最小空闲连接
initialSize 初始化连接

测试所用数据

#创建数据库
CREATE DATABASE db5 CHARACTER SET utf8;
#使用数据库
USE db;
#创建员工表
CREATE TABLE employee (
eid INT PRIMARY KEY AUTO_INCREMENT ,
ename VARCHAR (20), -- 员工姓名
age INT , -- 员工年龄
sex VARCHAR (6), -- 员工性别
salary DOUBLE , -- 薪水
empdate DATE -- 入职日期
);
#插入数据
INSERT INTO employee (eid, ename, age, sex, salary, empdate) VALUES(NULL,'李清
照',22,'女',4000,'2018-11-12');
INSERT INTO employee (eid, ename, age, sex, salary, empdate) VALUES(NULL,'林黛
玉',20,'女',5000,'2019-03-14');
INSERT INTO employee (eid, ename, age, sex, salary, empdate) VALUES(NULL,'杜
甫',40,'男',6000,'2020-01-01');
INSERT INTO employee (eid, ename, age, sex, salary, empdate) VALUES(NULL,'李白',25,'男',3000,'2017-10-01');

例子:
查询所有员工的姓名

import com.cyh.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);
        }

        DBCPUtils.close(con,statement,resultSet);
    }
}

猜你喜欢

转载自blog.csdn.net/Guai_Ka/article/details/113750555