apache-DBUtils 工具类

发布时间 2023-04-04 22:14:49作者: 微风抚秀发

用于查询多行多列的数据

package com.jdbc.DBUtils;

import com.JDBC_Utils.JDBCUtilsByDruid;
import com.JDBC_Utils.News;
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.jupiter.api.Test;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

public class DBUtils_USE {

    /**
     * 使用 apache-DBUtils 工具类 + druid 完成对表的 crud 操作
     * */

    /**
     * 用于查询多行多列的数据
     */
    @Test
    public void testSelect_BeanListHandler() {
        //1.得到 druid 连接
        Connection connection = null;

        try {
            connection = JDBCUtilsByDruid.getConnection();
            //2.使用 DBUtils 类和接口 , 先引入 DBUtils 相关的 jar , 加入到本项目中
            //3.创建QueryRunner(QueryRunner类封装了sql的执行,可以实现crud,线程安全)
            QueryRunner queryRunner = new QueryRunner();
            //4.执行 相关操作 返回ArrayList结果集 (也可以查询部分列)
            String sql = "select * from news where id>=?";
            //光标放在括号里,ctrl + p 可以查看参数
            List<News> list = queryRunner.query(connection, sql, new BeanListHandler<>(News.class), 6);
            //(1)query 方法就是执行 sql 语句,得到 resultset ---封装到 --> ArrayList 集合中,
            //(2)并返回集合
            //(3) connection: 连接
            //(4) sql : 执行的 sql 语句
            //(5) new BeanListHandler<>(Actor.class): 在将 resultset -> News 对象 -> 封装到 ArrayList
            // 底层使用反射机制 去获取 Actor 类的属性,然后进行封装
            //(6) 10 就是给 sql 语句中的? 赋值,可以有多个值,因为是可变参数 Object... params
            //(7) 底层得到的 resultset ,会在 query 关闭, 且关闭 PreparedStatment
            //输出list  查看获取到的结果集
            System.out.println(list);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            JDBCUtilsByDruid.close(null, null, connection);
        }
    }
}

用于查询单行的数据

/**
     * 用于查询单行的数据
     * 演示 apache-dbutils + druid 完成 返回的结果是单行记录(单个对象)
     */
    @Test
    public void testSelect_BeanHandler() {
        //1.得到 druid 连接
        Connection connection = null;
        try {
            connection = JDBCUtilsByDruid.getConnection();
            //2.使用 DBUtils 类和接口 , 先引入 DBUtils 相关的 jar , 加入到本项目中
            //3.创建QueryRunner(QueryRunner类封装了sql的执行,可以实现crud,线程安全)
            QueryRunner queryRunner = new QueryRunner();
            //4.执行 相关操作 返回结果集
            String sql = "select * from news where id=?";
            //光标放在括号里,ctrl + p 可以查看参数
            // 因为我们返回的单行记录<--->单个对象 , 使用的 Hander 是 BeanHandler
            News news = queryRunner.query(connection, sql, new BeanHandler<>(News.class), 10);
            System.out.println(news);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            JDBCUtilsByDruid.close(null, null, connection);
        }
    }

用于查询单列结果

/**
     * 用于查询单列结果
     * 演示 apache-dbutils + druid 完成查询结果是单行单列-返回的就是 object
     */
    @Test
    public void testSelect_ScalarHandler() {
        //1.得到 druid 连接
        Connection connection = null;
        try {
            connection = JDBCUtilsByDruid.getConnection();
            //2.执行方法  返回单行单列
            QueryRunner queryRunner = new QueryRunner();
            String sql = "select count(?) from news";
            //因为返回的是一个对象, 使用的 handler 就是 ScalarHandler
            //返回单行单列 , 返回的就是 Object
            Object o = queryRunner.query(connection, sql, new ScalarHandler(), "*");
            System.out.println(o);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            JDBCUtilsByDruid.close(null, null, connection);
        }
    }

对数据库进行DML操作(插入,更新,删除语句)

 /***
     * 对数据库进行DML操作(插入,更新,删除语句)
     * */
    @Test
    public void testDML() {
        Connection connection = null;

        try {
            connection = JDBCUtilsByDruid.getConnection();
            //删除语句
            //String sql = "delete from news where id=?";
            //插入语句
            //String sql = "insert into news values (?,?,?)";
            //更新语句
            String sql = "update news set id=? where id=?";
            QueryRunner queryRunner = new QueryRunner();
            // 执行 dml 操作是 queryRunner.update()
            //受影响行数   方法返回一个int数值
            //int affectRows = queryRunner.update(connection, sql, 6,"小度","小度小度你在干嘛");
            int affectRows = queryRunner.update(connection, sql, 7, 9);
            System.out.println(affectRows > 0 ? "操作成功" : "数据库未被影响");
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            JDBCUtilsByDruid.close(null, null, connection);
        }

    }