package day39.datasource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.jupiter.api.Test;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
/**
* @Author: monian
* @Tips: Wo yi wu ta,wei shou shu er!
* @Date: 2023/11/16 16:02
*/
@SuppressWarnings({"all"})
public class DBUtils_USE {
@Test
//使用apache-DBUtils 工具类 + druid 完成对表的 crud 操作
public void testQueryMany() throws SQLException {//返回结果是多行的情况
// 1. 得到连接
Connection connection = JDBCUtilsByDruid.getConnection();
// 2. 使用DBUtils 类和接口,先引入DBUtils 相关的jar,加入到本Project
// 3. 创建 QueryRunner
QueryRunner queryRunner = new QueryRunner();
// 4. 就可以执行相关的方法,返回ArrayList 结果集
String sql = "select id ,name from account where id >= ?";
/*
1. query 方法就是执行sql语句,得到resultset ----封装到 --> ArrayList 集合中
2. 返回集合
3. connection: 连接
4. sql: 执行的sql语句
5. new BeanListHandler<>(Actor .class): 在将resultset -> Actor 对象 -> 封装到 ArrayList
底层使用反射机制 去获取Actor 类的属性,然后进行封装
6. 1 就是给sql语句中的? 赋值,可以有多个值,因为是可变参数Object...params
*/
List<Actor> list =
queryRunner.query(connection, sql, new BeanListHandler<>(Actor.class), 1);
System.out.println("输出集合的信息");
for (Actor actor : list) {
System.out.println(actor);
}
//释放资源
JDBCUtilsByDruid.close(null, null, connection);
}
@Test
//演示 apache-dbutils + druid 完成 返回的结果是单行记录(单个对象)
public void testQuerySingle() throws SQLException {
// 1. 得到连接 (druid)
Connection connection = JDBCUtilsByDruid.getConnection();
// 2. 使用 DBUtils 类和接口 ,先引入DBUtils 相关的jar ,加入到本Project
// 3. 创建 QueryRunner
QueryRunner queryRunner = new QueryRunner();
// 4. 就可以执行相关的方法,返回ArrayList 结果集
String sql = "select * from account where id = ?";
// 因为我们返回的是单行记录<------> 单个对象,使用的Hander 是 BeanHandler
List<Actor> query = queryRunner.query(connection, sql, new BeanListHandler<>(Actor.class), 2);
System.out.println(query);
//释放资源
JDBCUtilsByDruid.close(null, null, connection);
}
//演示apache-dbutils = druid 完成 查询结果是单行单列 - 返回的就是object
@Test
public void testScalar() throws SQLException {
// 1. 得到连接 (druid)
Connection connection = JDBCUtilsByDruid.getConnection();
// 2. 使用 DBUtils 类和接口,先引入DBUtils 相关的jar,加入到本Project
// 3. 创建 QueryRunner
QueryRunner queryRunner = new QueryRunner();
// 4. 就可以执行相关的方法,返回单行单列
String sql = "select name from account where id = ?";
Object obj = queryRunner.query(connection, sql, new ScalarHandler(), 2);
System.out.println(obj);
//释放资源
JDBCUtilsByDruid.close(null, null, connection);
}
@Test
// 演示apache-dbutils + druid 完成 dml (update, insert, delete)
public void testDML() throws SQLException {
// 1. 得到 连接(deuid)
Connection connection = JDBCUtilsByDruid.getConnection();
// 2. 使用 DBUtils 类和接口,先引入DBUtils相关的jar,加入到本Project
// 3. 创建 QueryRunner
QueryRunner queryRunner = new QueryRunner();
// 4. 这里组织 sql 完成 update, insert delete
String sql = "update account set name = ? where id = ?";
String sql2 = "update account set balance = ? where id = ?";
String sql3 = "insert into account values(null, ?, ?)";
String sql4 = "delete from account where id = ?";
/*
1. 执行 dml 操作是 queryRunner.update()
2. 返回的值是受影响的行数 (affected:受影响)
*/
int count = 0;
int affectedRow = queryRunner.update(connection, sql, "腾格尔", 1);
int affectedRow2 = queryRunner.update(connection, sql2, 6666, 1);
int affectedRow3 = queryRunner.update(connection, sql3, "李荣浩", 235656);
int affectedRow4 = queryRunner.update(connection, sql4, 1);
count = affectedRow + affectedRow2 + affectedRow3 + affectedRow4;
System.out.println(count > 0 ? "执行成功" : "执行没有影响到表");
//释放资源
JDBCUtilsByDruid.close(null, null, connection);
}
}