当前位置: 首页 > news >正文

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);
    }

相关文章:

  • 补涨行情的模式如何做?(几天几板模式)
  • 基于Levy飞行策略的改进樽海鞘群算法-附代码
  • 【CSDN高校社区无锡学院】# 新学期,新Flag # 开学季征文活动
  • Linux安装zlib、libpng、freetype给交叉编译工具链使用
  • 深度讲解指针的笔试题目
  • Python 环境安装系统教程——PyCharm
  • 都这麽大了还不快了解防火墙(1)?
  • Code For Better 谷歌开发者之声——谷歌Web工具包(GWT)
  • c++图解内存管理
  • 【微信小程序】自定义组件(二)
  • 基于SSM的水果商城
  • Ubuntu20.04美化成mac OS苹果风格
  • 国际航运管理复习总结题
  • 详解Redis基础数据类型Set增删查(带Java源码)
  • 从零开始实现一个量化回测系统(二)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Android组件 - 收藏集 - 掘金
  • gf框架之分页模块(五) - 自定义分页
  • JavaScript设计模式与开发实践系列之策略模式
  • JS基础之数据类型、对象、原型、原型链、继承
  • Leetcode 27 Remove Element
  • PAT A1050
  • PAT A1092
  • uva 10370 Above Average
  • 阿里云购买磁盘后挂载
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 我看到的前端
  • MPAndroidChart 教程:Y轴 YAxis
  • 从如何停掉 Promise 链说起
  • ​520就是要宠粉,你的心头书我买单
  • (k8s中)docker netty OOM问题记录
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (二)fiber的基本认识
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (三)mysql_MYSQL(三)
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .bashrc在哪里,alias妙用
  • .gitignore
  • .NET运行机制
  • .net中应用SQL缓存(实例使用)
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [C#]C#学习笔记-CIL和动态程序集
  • [Effective C++读书笔记]0012_复制对象时勿忘其每一部分
  • [GDOUCTF 2023]<ez_ze> SSTI 过滤数字 大括号{等
  • [GYCTF2020]Ez_Express
  • [HTTP]HTTP协议的状态码
  • [javascript]Tab menu实现
  • [Java安全入门]三.CC1链
  • [Java基础]—JDBC