ApacheDBUtils的使用

本次博客带领大家学习ApacheDBUtils的使用。

ApacheDBUtils的图文分析

请添加图片描述

使用传统方法来解决ResultSet的封装问题

  • 创建一个Actor对象和ArrayList集合对象,将ResultSet的结果封装到ArrayList中。
public class Actor {
    private Integer id;
    private String name;
    private String sex;
    private Date borndate;
    private String phone;

    public Actor() {
    }

    public Actor(Integer id, String name, String sex, Date borndate, String phone) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.borndate = borndate;
        this.phone = phone;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBorndate() {
        return borndate;
    }

    public void setBorndate(Date borndate) {
        this.borndate = borndate;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "\nActor{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", borndate=" + borndate +
                ", phone='" + phone + '\'' +
                '}';
    }
}
public void testSelect1(){
        System.out.println("使用ResultSet =封装查询:");
        //1. 得到连接
        Connection connection = null;

        // 2.组织一个sql
        String sql = "select * from actor";
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        ArrayList<Actor> list = new ArrayList<>();
        //3.创建PrepareStatement对象
        try {
            connection = JDBCUtilsByDruid.getConnection();
            preparedStatement = connection.prepareStatement(sql);
            resultSet = preparedStatement.executeQuery();
            while(resultSet.next()){
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                String sex = resultSet.getString("sex");
                Date borndate = resultSet.getDate("borndate");
                String phone = resultSet.getString("phone");
                //把得到的resultset的记录,封装到Actor对象,放入到list集合
                list.add(new Actor(id,name,sex,borndate,phone));
                //System.out.println(id+"\t"+name+"\t"+sex+"\t"+borndate+"\t"+phone);
            }
            System.out.println("集合中的数据"+list);
            for (Actor actor : list){
                System.out.println("id="+actor.getId()+"\t"+actor.getName());
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //关闭资源
            JDBCUtilsByDruid.close(null,preparedStatement,connection);
        }
    }

ApacheDBUtils的基本介绍

  1. commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的封装,使用dbutils能极大简化jdbc编码的工作量。

  2. QueryRunner类:该类封装了SQL的执行,是线程安全的。可以实现增、删、改、查、批处理的操作。

  3. ResultSetHandler接口:该接口用于处理java.sql.ResultSet,将数据按要求转换为另一种形式。

    • ArrayHandler:把结果集合的第一行数据转换成对象数组。
      ArrayListHandler:把结果集合的每一行数据转换成数组,再存放到List中。
      BeanHandler:把结果集合的第一行数据封装到一个对应的JavaBean实例中。
      BeanListHandler:把结果集合的每一行数据封装到一个对应的JavaBean实例中,再存放到List里。
      ColumnListHandler:将结果集中的某一列的数据存放到List中。
      keyedHandler(name):将结果集中的每行数据都封装到Map里,再把这些map再存到一个map里,其key为指定的key。
      MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
      MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List。
      

ApacheDBUtils的应用实例

  • 使用ApacheDBUtils+数据库连接池(德鲁伊)方式,完成对表actor的查询。
public void testQueryMany() throws SQLException {
        //1.得到连接 (druid)
        Connection connection = JDBCUtilsByDruid.getConnection();
        //2.使用 DBUtils 类和接口,先引入 DBUtils 相关的jar,加入到项目中
        //3.创建 QueryRunner
        QueryRunner queryRunner = new QueryRunner();
        //4.就可以执行相关的方法,返回ArrayList结果集
        String sql = "select * from actor where id >= ?";
        //1.query 方法就是执行sql 语句,得到resultset  ----封装到  --> ArrayList 集合中
        //2.返回集合
        //3.connection :连接
        //4.sql:执行的sql语句
        //5.new BeanListHandler<>(Actor.class):在将resultset -> Actor对象 ->封装到ArrayList
        //6. 1 就是给sql语句中的?赋值,可以有多个值,因为是可变参数Object... params
        //7.底层得到的resultset,会在query关闭,关闭PreparedStatement
        List<Actor> list = queryRunner.query(connection, sql, new BeanListHandler<>(Actor.class), 1);

        System.out.println("输出集合的信息:");
        for (Actor actor : list){
            System.out.print(actor);
        }

        //释放资源
        JDBCUtilsByDruid.close(null,null,connection);
    }
  • 使用ApacheDBUtils+数据库连接池(德鲁伊)方式,完成返回的结果是单行记录(单个对象)。
public void testQuerySingle() throws SQLException {
        //1.得到连接 (druid)
        Connection connection = JDBCUtilsByDruid.getConnection();
        //2.使用 DBUtils 类和接口,先引入 DBUtils 相关的jar,加入到项目中
        //3.创建 QueryRunner
        QueryRunner queryRunner = new QueryRunner();
        //4.就可以执行相关的方法,返回单个对象
        String sql = "select * from actor where id = ?";
        // 因为我们返回的单行记录<---> 单个对象,使用的Handler 是 BeanHandler
        Actor actor = queryRunner.query(connection, sql, new BeanHandler<>(Actor.class), 4);
        System.out.println(actor);

        //释放资源
        JDBCUtilsByDruid.close(null,null,connection);
    }
  • 使用ApacheDBUtils+数据库连接池(德鲁伊)方式,完成查询结果是单行单列-返回的就是Object
public void testScalar() throws SQLException {
        //1.得到连接 (druid)
        Connection connection = JDBCUtilsByDruid.getConnection();
        //2.使用 DBUtils 类和接口,先引入 DBUtils 相关的jar,加入到项目中
        //3.创建 QueryRunner
        QueryRunner queryRunner = new QueryRunner();
        //4.就可以执行相关的方法,返回单行单列,返回的就是Object
        String sql = "select name from actor where id = ?";
        //因为返回的是一个对象,使用的handler 就是 ScalarHandler
        Object query = queryRunner.query(connection, sql, new ScalarHandler<>(), 4);
        System.out.println(query);
        //释放资源
        JDBCUtilsByDruid.close(null,null,connection);
    }
  • 演示ApacheDBUtils+数据库连接池(德鲁伊)方式,完成dml操作(update,insert,delete)。
public void testDML() throws SQLException {
        //1.得到连接 (druid)
        Connection connection = JDBCUtilsByDruid.getConnection();
        //2.使用 DBUtils 类和接口,先引入 DBUtils 相关的jar,加入到项目中
        //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(null,?,?,?,?)";
        String sql = "delete from actor where id=?";

        //1.执行dml操作是 queryRunner.update()
        //2.返回值是受影响的行数

        //int affectedRow = queryRunner.update(connection, sql, "林青霞","女","1960-10-10","90");
        int affectedRow = queryRunner.update(connection, sql, 3);
        System.out.println(affectedRow > 0 ? "执行成功" : "执行没有影响到表");
        //释放资源
        JDBCUtilsByDruid.close(null,null,connection);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值