为数据库建立的一个缓冲池,其中会放入一定数量的连接。
建立数据库连接时,从池中取出;用完时放回池中。
JDBC提供的为了获取连接对象的接口,负责与数据库建立连接。
它的实现类称为数据源,创建连接的信息会存储在数据源中,通过数据源可以管理数据库连接池。
不同的数据库连接池需要不同的连接池组件,以下将介绍DBCP数据库连接池实现数据库的连接。
需要以下四个包:
数据库驱动jar包下载一个即可-可翻阅往期文章
commons-dbcp.jar
commons-logging.jar
commons-pool.jar
导包流程上个笔记也有介绍
(1).DBCP数据库连接池
手动创建实现连接:
public class dbcp3 {
public static void main(String[] args) throws SQLException {
// 使用BasicDataSource具体实现类来连接数据库
BasicDataSource bds = new BasicDataSource();
// 设置各种数据库连接参数
bds.setDriverClassName("com.mysql.cj.jdbc.Driver");
bds.setUsername("root");
bds.setUrl("jdbc:mysql://localhost:3306/db1?serverTimezone=GMT%2B8");
bds.setPassword("12345");
// 获取连接和连接信息
Connection connection = bds.getConnection();
System.out.println("连接成功!");
}
}
通过配置文件创建实现连接:
#配置文件dbcpconfig.properties代码
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/db1?serverTimezone=GMT%2B8
#url=jdbc:mysql://localhost:3306/db1??useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
username=root
password=12345
public class dbcp4 {
public static void main(String[] args) throws Exception {
// 创建配置文件读取对象
Properties p = new Properties();
// 创建配置文件的文件输入流
InputStream in = Files.newInputStream(Paths.get("servletModule/src/dbcp/dbcpconfig.properties"));
// 将配置文件加载到对象中
p.load(in);
// 将Properties对象放置到创建链接的方法中,这个操作就相当于之前的一堆set方法
BasicDataSource bds = BasicDataSourceFactory.createDataSource(p);
// 然后就是获取连接以及打印连接信息
Connection conn = bds.getConnection();
System.out.println("数据库连接成功!");
}
}
(1).简介
是对JDBC的简单封装,可简化JDBC的编码工作。
(2).需要的工具包:
可按照需要更改jar包名
https://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi
导入:
(3).核心类库(API)
[1].DBUtils类:
提供加载JDBC驱动、关闭资源的方法
[2].QueryRunner类:
执行SQL语句
[3].ResultSetHandler接口:
处理ResultSet结果集。
接口实现类:
BeanHandler-封装单条数据到JavaBean中
BeanListHandler-封装多条数据到JavaBean中,再放入List集合中
ColumnListHandler-封装指定列的数据,并放入集合中
ScalarHandler-封装单条列数据及聚合函数的执行结果
(4).代码运用
创建数据源对象
public class source {
public static BasicDataSource getBasicDataSource() throws Exception {
// 创建配置文件读取对象
Properties p = new Properties();
// 创建配置文件的文件输入流
InputStream in = Files.newInputStream(Paths.get("servletModule/src/dbcp/dbcpconfig.properties"));
// 将配置文件加载到对象中
p.load(in);
// 将Properties对象放置到创建链接的方法中,这个操作就相当于之前的一堆set方法
BasicDataSource bds = BasicDataSourceFactory.createDataSource(p);
// 然后就是获取连接以及打印连接信息
return bds;
}
}
使用DBUtils工具操作数据库
public class source {
/**
*不同返回结果类型的查询方法
*/
public void selectAll() {
Connection con = null;
try {
con = source.getBasicDataSource().getConnection();//通过dbcp获取连接
QueryRunner runner = new QueryRunner(source.getBasicDataSource());//创建QueryRunner类,获取数据源对象
String sql = "select * from stu1";
//通过query执行查询操作,用beanlisthandler将查询结果封装成javabean-user类,放入 list集合中
List i = runner.query(sql, new BeanListHandler(user.class));//封装多条数据
for (user users : i) {//遍历输出结果
System.out.println(users.getId() + ":" + users.getName() + ":" + users.getAge());
}
DbUtils.close(con);//dbutils工具提供的关闭资源的方法
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void selectRow(int id) {
Connection con = null;
try {
con = source.getBasicDataSource().getConnection();
QueryRunner runner = new QueryRunner(source.getBasicDataSource());
String sql = "select * from stu where id=?";
//通过query执行查询操作,用beanlisthandler将查询结果封装成javabean-user类,放入 list集合中
user u1 = (user) runner.query(sql, new BeanHandler(user.class), 3);//封装单行数据
System.out.println("查询结果为:" + u1.toString());
DbUtils.close(con);//dbutils工具提供的关闭资源的方法
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void selectColum(String i){
Connection con = null;
try {
con = source.getBasicDataSource().getConnection();
QueryRunner runner = new QueryRunner(source.getBasicDataSource());
String sql="select * from stu ";
//通过query执行查询操作,用ColumnListHandler将查询结果封装成javabean-user类,放入 list集合中
List list = (List) runner.query(sql, new ColumnListHandler(i));//封装指定列数据
System.out.println("输出为:"+list);
DbUtils.close(con);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void selectFunc(){
Connection con = null;
try {
con = source.getBasicDataSource().getConnection();
QueryRunner runner = new QueryRunner(source.getBasicDataSource());
String sql2="select count(*) from stu ";
//通过query执行查询操作,用ScalarHandler将查询结果封装成javabean-user类,放入 list集合中
Object o2 = runner.query(sql2, new ScalarHandler());//封装聚集函数的执行结果
System.out.println("输出为:"+o2);
DbUtils.close(con);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 更新操作的示例
*/
public void update(int id,String name,int age) {
Connection con = null;
try {
con = source.getBasicDataSource().getConnection();
QueryRunner runner = new QueryRunner(source.getBasicDataSource());
String sql = "insert into stu1(id,name,age) values(?,?,?)";
Object param[] = {id, name, age};//创建一个数组参数
int i = runner.update(sql, param);//通过QueryRunner实现类update执行更新操作
System.out.println("添加内容:" + i+"行");
DbUtils.close(con);//通过DBUtils工具关闭资源
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
以上两段代码均是source类中定义的方法。
创建测试类
public class test {
public static void main(String[] args) throws Exception {
source source = new source();
BasicDataSource dataSource = source.getBasicDataSource();
System.out.println("查询所有信息:");
source.selectAll();
System.out.println("查询id为3的信息:");
source.selectRow(3);
System.out.println("查询姓名列信息:");
source.selectColum("name");
System.out.println("学生总人数:");
source.selectFunc();
System.out.println("插入一名学生信息");
source.update(10,"顿顿",8);
}
}
这篇文章是我对数据库连接池连接数据库的拓展,主要是想给大家介绍DBUtils工具对数据库操作的使用。如果觉得有帮助的话,不要吝啬你的小拇指哦!