package DBUtils_;
import druid_.Actor;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
/**
* 使用Apache-DBUtils 工具类 + Druid 完成对Actor表的CRUD操作
*/
public class DBUtils_Use {
//select语句用queryRunner.query()
@Test
public void testQueryMany() 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 actor where id >= ?";
//也可以查询部分列,只不过其余列的值为null。
String sql = "select id,name from actor where id >= ?";
List<Actor> list =
queryRunner.query(connection, sql, new BeanListHandler<>(Actor.class), 1);
/*
说明:
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。
7. 底层得到的resultSet,会在query方法中关闭,PreparedStatment也会被关闭。
*/
for(Actor actor : list){
System.out.print(actor);
}
//释放资源
//这里传入null即可,因为前面已经关闭了。
JDBCUtilsByDruid.Close(null,null,connection);
}
//演示 Apache-DBUtils + Druid 完成返回的结果是单行记录(单个对象)。
@Test
public void testQuerySingle() throws SQLException {
//1.得到连接(用Druid)
Connection connection = JDBCUtilsByDruid.getConnection();
//2.使用DBUtils类和接口,先引入DBUtils相关的jar,加入到本Project中。
//3.创建QueryRunner
QueryRunner queryRunner = new QueryRunner();
//4.可以执行相关的方法,返回单个的记录。
String sql = "select * from actor where id = ?";
//new BeanHandler<>(Actor.class):因为返回的是单行记录--->单个对象,所以用BeanHandler。
Actor actor =
queryRunner.query(connection, sql, new BeanHandler<>(Actor.class), 1);
//这里的4:表示给?赋值为4
if (actor != null)
System.out.println(actor);
else
System.out.println("查无此信息!");
//释放资源
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.返回单行单列,返回的就是Object。
String sql = "select name from actor where id = ?";
//说明:返回单行单列用ScalarHandler()
Object obj = queryRunner.query(connection, sql, new ScalarHandler(), 1);
if (obj != null)
System.out.println(obj);
else
System.out.println("查无此人!");
//释放资源
JDBCUtilsByDruid.Close(null,null,connection);
}
//演示Apache-DBUtils + Druid 完成 dml语句(update,insert,delete)
//dml语句用:queryRunner.update()
@Test
public void testDML() throws SQLException {
//1.得到连接(用Druid)
Connection connection = JDBCUtilsByDruid.getConnection();
//2.使用DBUtils类和接口,先引入DBUtils相关的jar,加入到本Project中。
//3.创建QueryRunner
QueryRunner queryRunner = new QueryRunner();
//4.这里组织sql语句,完成update,insert,delete。
//String sql = "update actor set name = ? where id = ?";
//String sql = "insert into actor values (?,?,?,?,?)";
String sql = "delete from actor where id = ?";
//执行dml操作是 queryRunner.update(),insert,delete,update都是用这个方法。
//返回值是:受影响的行数
//int affectedRow = queryRunner.update(connection, sql, "TOM","4");
//int affectedRow = queryRunner.update(connection, sql, null,"LUCA","男","2000-09-10","000");
int affectedRow = queryRunner.update(connection, sql, "1");
System.out.println(affectedRow > 0 ? "执行成功" : "表未受改变");
//释放资源
JDBCUtilsByDruid.Close(null,null,connection);
}
}
Java中使用Apache-DBUtils 工具类 + Druid 完成对Actor表的CRUD操作
键盘为伴2025-05-26 19:56