一、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);
}
}