前言
文章内容输出来源:拉勾教育Java就业训练营
数据库连接池
连接池介绍
- 什么是连接池
实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们
采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交
给了连接池.
- 连接池的好处
用池来管理Connection,这样可以重复使用Connection。 当使用完Connection后,调用Connection的
close()方法也不会真的关闭Connection,而是把Connection“归还”给池。
JDBC方式与连接池方式
- 普通JDBC方式
用普通jdbc进行处理使用后就要进行处理,无法重复使用。
- 连接池方式
用连接池进行管理Connection可以重复使用。
如何使用数据库连接池
- Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。
这样应用程序可以方便的切换不同厂商的连接池!
- 常见的连接池有 DBCP连接池, C3P0连接池, Druid连接池。
数据准备
CREATE DATABASE db5 CHARACTER SET utf8;
USE db5;
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');
DBCP连接池
- DBCP也是一个开源的连接池,是Apache成员之一,在企业开发中也比较常见,tomcat内置的连接池.
创建项目 导入 jar包
- 将这两个 jar包添加到 myJar文件夹中
- 添加myJar库 到项目的依赖中
编写工具类
- 连接数据库表的工具类, 采用DBCP连接池的方式来完成
- Java中提供了一个连接池的规则接口 : DataSource , 它是java中提供的连接池
- 在DBCP包中提供了DataSource接口的实现类,我们要用的具体的连接池 BasicDataSource 类
package com.zyp.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 {
public static final String DRIVERNAME = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:3306/db5?characterEncoding=UTF-8";
public static final String USERNAME = "root";
public static final String PASSWORD = "qwer1234";
public static BasicDataSource dataSource = new BasicDataSource();
static {
dataSource.setDriverClassName(DRIVERNAME);
dataSource.setUrl(URL);
dataSource.setUsername(USERNAME);
dataSource.setPassword(PASSWORD);
}
public static Connection getConnection() throws SQLException {
Connection connection = dataSource.getConnection();
return connection;
}
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) {
try {
resultSet.close();
statement.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
测试工具类
package com.zyp.testpool;
import com.zyp.utils.DBCPUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestDBCP {
public static void main(String[] args) throws SQLException {
Connection con = DBCPUtils.getConnection();
Statement statement = con.createStatement();
String sql = "select ename from employee";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
String ename = resultSet.getString("ename");
System.out.println("员工姓名为:" + ename);
}
DBCPUtils.close(con, statement, resultSet);
}
}
结果>>>
员工姓名为:李清照
员工姓名为:林黛玉
员工姓名为:杜甫
员工姓名为:李白
常见配置项
属性 |
描述 |
driverClassName |
数据库驱动名称 |
url |
数据库地址 |
username |
用户名 |
password |
密码 |
maxActive |
最大连接数量 |
maxIdle |
最大空闲连接 |
minIdle |
最小空闲连 |