Java中使用Apache-DBUtils 工具类 + Druid 完成对Actor表的CRUD操作

复制代码
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);
    }
}
相关推荐
自由随风飘2 小时前
python 题目练习1~5
开发语言·python
cynicme3 小时前
力扣3318——计算子数组的 x-sum I(偷懒版)
java·算法·leetcode
Bony-3 小时前
Go语言完全学习指南 - 从基础到精通------语言基础篇
服务器·开发语言·golang
青云交4 小时前
Java 大视界 -- Java 大数据在智能教育学习效果评估与教学质量改进实战
java·实时分析·生成式 ai·个性化教学·智能教育·学习效果评估·教学质量改进
崎岖Qiu4 小时前
【设计模式笔记17】:单例模式1-模式分析
java·笔记·单例模式·设计模式
fl1768314 小时前
基于python的天气预报系统设计和可视化数据分析源码+报告
开发语言·python·数据分析
Lei活在当下5 小时前
【现代 Android APP 架构】09. 聊一聊依赖注入在 Android 开发中的应用
java·架构·android jetpack
ACP广源盛139246256735 小时前
(ACP广源盛)GSV6172---MIPI/LVDS 信号转换为 Type-C/DisplayPort 1.4/HDMI 2.0 并集成嵌入式 MCU
c语言·开发语言·单片机·嵌入式硬件·音视频
不穿格子的程序员5 小时前
从零开始刷算法-栈-括号匹配
java·开发语言·
雪域迷影5 小时前
C#中通过get请求获取api.open-meteo.com网站的天气数据
开发语言·http·c#·get