Apache——DBUtils

韩顺平 零基础30天学会Java

一、基本介绍

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

二、DbUtils类

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

2、使用QueryRunner类实现查询

3、ResultSetHandler接口:改接口用于处理java.sql.ResultSet,将数据按照要求转换成另一种形式

三、使用DBUtils+数据库连接池(Druid)方式完成对表的操作

  • actor表

    public class DBUtils_Use {
    //测试查询到多行结果
    @Test
    public void testQueryMany() throws Exception {
    //1、得到连接
    Connection connection = Druid.getConnection();
    //使用DBUtils 类和接口,先引入DBUtils相关的jar,加入到本Project
    //3、创建QueryRunner
    QueryRunner queryRunner = new QueryRunner();
    //4、就可以执行相关的方法返回ArrayList 返回结果集
    // (1)query 方法就是执行sql语句,得到resultSet----封装到--->ArrayList集合中
    //(2)返回集合
    //(3)connection:连接
    // (4)sql:执行的sql语句
    // (5)new BeanListHandler<>(Actor.class):在将resultset-》actor对象-》封装到ArrayList
    //底层使用反射机制,去获取Actor类的属性然后进行封装
    // (6)1 就是给sql语句中的?赋值,可以有多个值,因为是可变参数
    //(7)底层的到的resultSet,会在query 关闭,之后不用再关闭
    String select = "select * from actor";
    List<Actor> list = queryRunner.query(connection, select, new BeanListHandler<>(Actor.class));
    System.out.println("输出集合信息");
    for (Actor actor : list) {
    System.out.println(actor);
    }

    复制代码
          //释放连接
          Druid.close(null, null, connection);
      }
    
      //测试查询到单行结果
      @Test
      public void testSingle() throws Exception {
          //1、得到连接
          Connection connection = Druid.getConnection();
          //2、创建QueryRunner
          QueryRunner queryRunner = new QueryRunner();
          //3、sql语句
          String select = "select * from actor where id=?";
          //因为知道返回的是单行记录,因此使用 BeanHandler
          Actor actor = queryRunner.query(connection, select, new BeanHandler<>(Actor.class), 3);
          System.out.println(actor);
    
          //释放资源
          Druid.close(null, null, connection);
      }
    
      //演示查询单行单列的情况
      @Test
      public void testScalar() throws Exception {
          //1、得到连接
          Connection connection = Druid.getConnection();
          //2、创queryRunner
          QueryRunner queryRunner = new QueryRunner();
          //3、组织sql
          String select = "select name from actor where id=?";
          //执行
          Object query = queryRunner.query(connection, select, new ScalarHandler(), 3);
          System.out.println(query);
          //释放资源
          Druid.close(null, null, connection);
      }
    
      //更新内容
      @Test
      public void update() throws Exception {
          //1、获得连接
          Connection connection = Druid.getConnection();
          //2、创建QueryRunner
          QueryRunner queryRunner = new QueryRunner();
          //3、组织sql语句
          String update = "UPDATE actor SET `name`=? WHERE id=?";
          //4、执行
          int updateRows = queryRunner.update(connection, update, "新小龙女", 4);
          //5、释放资源
          Druid.close(null, null, connection);
      }
    
      //删除内容
      @Test
      public void delete() throws Exception {
          //1、获得连接
          Connection connection = Druid.getConnection();
          //2、创建QueryRunner
          QueryRunner queryRunner = new QueryRunner();
          //3、组织sql
          String delete = "DELETE FROM actor WHERE id=3";
          //4、执行
          int deleteRows = queryRunner.update(connection, delete);
          System.out.println(deleteRows > 0 ? "成功" : "失败");
          //5、释放资源
          Druid.close(null, null, connection);
    
      }
    
      //增加内容
      @Test
      public void insert() throws Exception {
          //1、获得连接
          Connection connection = Druid.getConnection();
          //2、创建QueryRunner
          QueryRunner queryRunner = new QueryRunner();
          //3、组织sql
          String insert = "INSERT INTO actor VALUES(null,?,?,?,?)";
          //4、执行
          int insertRows = queryRunner.update(connection, insert, "张三", "男", "1999-08-24", "119");
          System.out.println(insertRows > 0 ? "成功" : "失败");
          //5、释放资源
          Druid.close(null, null, connection);
      }

    }

相关推荐
陌上丨13 小时前
Redis的Key和Value的设计原则有哪些?
数据库·redis·缓存
AI_567814 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
ccecw14 小时前
Mysql ONLY_FULL_GROUP_BY模式详解、group by非查询字段报错
数据库·mysql
JH307314 小时前
达梦数据库与MySQL的核心差异解析:从特性到实践
数据库·mysql
数据知道14 小时前
PostgreSQL 核心原理:如何利用多核 CPU 加速大数据量扫描(并行查询)
数据库·postgresql
麦聪聊数据15 小时前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
未来之窗软件服务15 小时前
数据库优化提速(四)新加坡房产系统开发数据库表结构—仙盟创梦IDE
数据库·数据库优化·计算机软考
Goat恶霸詹姆斯17 小时前
mysql常用语句
数据库·mysql·oracle
大模型玩家七七17 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
曾经的三心草17 小时前
redis-9-哨兵
数据库·redis·bootstrap