• 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 + '\'' +
                    '}';
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    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);
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    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。
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8

    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);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 使用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);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 使用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);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 演示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);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    GoLand远程开发IDE:使用SSH远程连接服务器进行云端编程
    手写RPC框架--4.服务注册
    阿里云服务器带宽可以修改吗?不够用怎么办?
    高阶数据结构学习 —— 图(4)
    JavaScript 63 JavaScript 对象 63.1 JavaScript 对象定义
    Rxjs源码解析(一)Observable
    (九)MyBatis查询语句的返回值类型
    Linux系统IO和标准IO的接口函数
    数据结构-leetcode-数组形式的整数加法
    Android Shape设置背景
  • 原文地址:https://blog.csdn.net/lidong777777/article/details/126803701