DbUtils组件学习

DbUtils组件简介: commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。 DbUtils组件作用:   DbUtils是一个为做一些诸如关闭连接、装载JDBC...
摘要由CSDN通过智能技术生成

DbUtils组件简介:

 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。

 DbUtils组件作用:

   DbUtils是一个为做一些诸如关闭连接、装载JDBC驱动程序之类的常规工作提供有用方法的类,它里面所有的方法都是静态的(总结:简化jdbc的操作 )

 DbUtils组件使用前提:

    下载组件,引入jar文件:commons-dbutils-1.6.jar

 DbUtils组件三个核心类介绍:

    1.DbUtils:连接数据库对象
      作用:关闭资源、加载驱动
     2.QueryRunner:SQL语句的操作对象
       构造方法:
       (1)QueryRunner():创建一个与数据库无关的QueryRunner对象,后期再操作数据库的会后,需要手动给一个Connection对象,它可以手动控制事务。
          Connection.setAutoCommit(false); 设置手动管理事务
          Connection.commit(); 提交事务

       (2)QueryRunner(DataSource ds):创建一个与数据库关联的queryRunner对象,后期再操作数据库的时候,不需要Connection对象,自动管理事务。
          DataSource:数据库连接池对象。

      Int update(Connection conn, String sql, Object param); 执行更新带一个占位符的sql
      Int update(Connection conn, String sql, Object… param); 执行更新带多个占位符的sql
      Int[] batch(Connection conn, String sql, Object[][] params) 批处理
      T query(Connection conn ,String sql, ResultSetHandler rsh, Object… params) 查询方法

        (3)ResultSetHandle:这一接口执行处理一个jaca.sql.ResultSet,将数据转变并处理为任何一种形式,这样有益于其应用而且使用起来更容易。这一组件提供了ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, MapHandler, MapListHandler, and ScalarHandler等执行程序。ResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。因此任何ResultSetHandler 的执行需要一个结果集(ResultSet)作为参数传入,然后才能处理这个结果集,再返回一个对象。因为返回类型是java.lang.Object,所以除了不能返回一个原始的Java类型之外,其它的返回类型并没有什么限制。如果你发现这七个执行程序中没有任何一个提供了你想要的服务,你可以自己写执行程序并使用它。
        

      DbUtils提供的封装结果的一些对象:
      1)BeanHandler: 查询返回单个对象
      2)BeanListHandler: 查询返回list集合,集合元素是指定的对象
      3) ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
      4) ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
      5) ScalarHandler 查询返回结果记录的第一行的第一列 (在聚合函数统计的时候用)
      6) MapHandler 查询返回结果的第一条记录封装为map

代码演示:

所用数据表:

这里写图片描述

    // 删除数据
    @Test
    public void test() throws Exception {
        // 创建数据库连接对象
        Connection conn = JdbcUtil.getConnection();
        // 创建sql
        String sql = "delete from student where id=?";
        // 创建Dbutils核心工具类对象
        QueryRunner queryRunner = new QueryRunner();
        // 执行sql
        queryRunner.update(conn, sql, 3);
        // 关闭数据库连接
        DbUtils.close(conn);
    }
运行结果:

这里写图片描述


代码演示:

所用数据表:

这里写图片描述

    // 添加数据
    @Test
    public void test1() throws Exception {
        // 创建数据连接对象
        Connection conn = JdbcUtil.getConnection();
        // 创建sql
        String sql = "insert into student(sname,gender) values(?,?)";
        // 创建Dbutils核心工具类对象
        QueryRunner queryRunner = new QueryRunner();
        // 执行sql
        queryRunner.update(conn, sql, "王力宏", "男");
        // 关闭数据库连接
        DbUtils.close(conn);
    }
运行结果:

这里写图片描述


代码演示:

所用数据表:

这里写图片描述

// 更改数据
    @Test
    public void test2() throws Exception {
        // 创建数据库连接对象
        Connection conn = JdbcUtil.getConnection();
        // 创建sql语句
        String sql = "update student set sname=? where id=?";
        // 创建Dbutils核心工具类对象
        QueryRunner queryRunner = new QueryRunner();
        // 执行sql
        queryRunner.update(conn, sql, "chenkefo", 2);
        // 关闭数据库连接
        DbUtils.close(conn);
    }
运行结果:

这里写图片描述


代码演示:

所用数据表:

这里写图片描述

// 批处理
    @Test
    public void batch() throws Exception {
        // 创建数据库连接对象
        Connection conn = JdbcUtil.getConnection();
        // 创建sql语句
        String sql = "insert into student(sname,gender) values(?,?)";
        // 创建Dbutils核心工具类对象
        QueryRunner queryRunner = new QueryRunner();
        // 执行sql
        queryRunner.batch(conn, sql,new Object[][] { { "林俊杰", "男" }, { "谢霆锋", "男" } });
        // 关闭数据库连接
        DbUtils.close(conn);
    }
运行结果:

这里写图片描述


代码演示:

所用数据表:

这里写图片描述

    // 查询,自定义结果集封装数据
    @Test
    public void test3() throws Exception {
        // 创建数据库连接对象
        Connection conn = JdbcUtil.getConnection();
        // 创建sql语句
        String sql = "select * from student where id=?";
        // 创建Dbutils核心工具类对象
        QueryRunner queryRunner = new QueryRunner();
        // 执行sql
        Student student = queryRunner.query(conn, sql,
                new ResultSetHandler<Student>() {
                    public Student handle(ResultSet rs) throws SQLException {
                        Student student = new Student();
                        if (rs.next()) {
                            student.setId(rs.getInt("id"));
                            student.setSname(rs.getString("sname"));
                            student.setGender(rs.getString("gender"));
                        }
                        return student;
                    }
                }, 1);
        // 输出结果
        System.out.println(student);
        // 关闭数据库连接资源
        DbUtils.close(conn);
    }
运行结果:
Student [id=1, sname=陈柯佛, gender=男]

代码演示:

所用数据表:

这里写图片描述

// 查询,使用组件提供的结果集对象封装数据
    // beanhandler:查询返回单个对象
    @Test
    public void test4() throws Exception {
        // 创建数据库连接对象
        Connection conn = JdbcUtil.getConnection();
        // 创建sql语句
        String sql = "select * from student where id=?";
        // 创建Dbutils核心工具类对象
        QueryRunner queryRunner = new QueryRunner();
        // 执行sql
        Student student = queryRunner.query(conn, sql,
                new BeanHandler<Student>(Student.class), 1);
        // 输出结果
        System.out.println(student);
        // 关闭数据库连接资源
        DbUtils.close(conn);
    }
运行结果:
Student [id=1, sname=陈柯佛, gender=男]
// BeanListHandler: 查询返回list集合,集合元素是指定的对象
    @Test
    public void test5() throws Exception {
        // 创建数据库连接对象
        Connection conn = JdbcUtil.getConnection();
        // 创建sql语句
        String sql = "select * from student";
        // 创建Dbutils核心工具类对象
        QueryRunner queryRunner = new QueryRunner();
        // 执行sql
        List<Student> list = queryRunner.query(conn, sql,
                new BeanListHandler<Student>(Student.class));
        // 输出结果
        System.out.println(list);
        // 关闭数据库连接资源
        DbUtils.close(conn);
    }
运行结果:
[Student [id=1, sname=陈柯佛, gender=男], Student [id=2, sname=周杰伦, gender=男], Student [id=3, sname=方文山, gender=男]]
// ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
    @Test
    public void test6() throws Exception {
        // 创建数据库连接对象
        Connection conn = JdbcUtil.getConnection();
        // 创建sql语句
        String sql = "select * from student";
        // 创建Dbutils核心工具类对象
        QueryRunner queryRunner = new QueryRunner();
        // 执行sql
        Object[] object = queryRunner.query(conn, sql, new ArrayHandler());
        // 输出结果
        for (int i = 0; i < object.length; i++) {
            System.out.println(object[i]);
        }
        // 关闭数据库连接资源
        DbUtils.close(conn);
    }
运行结果:
1
陈柯佛
男
// ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
    @Test
    public void test7() throws Exception {
        // 创建数据库连接对象
        Connection conn = JdbcUtil.getConnection();
        // 创建sql语句
        String sql = "select * from student";
        // 创建Dbutils核心工具类对象
        QueryRunner queryRunner = new QueryRunner();
        // 执行sql
        List<Object[]> list = queryRunner.query(conn, sql, new ArrayListHandler());
        // 输出结果
        for(Object[] object : list){
            for (int i = 0; i < object.length; i++) {
                System.out.print(object[i]+" ");
            }
            System.out.println();
        }
        // 关闭数据库连接资源
        DbUtils.close(conn);
    }
运行结果:
1 陈柯佛 男 
2 周杰伦 男 
3 方文山 男 
//ScalarHandler 查询返回结果记录的第一行的第一列  (在聚合函数统计的时候用)
    @Test
    public void test8() throws Exception {
        // 创建数据库连接对象
        Connection conn = JdbcUtil.getConnection();
        // 创建sql语句
        String sql = "select count(*) from student";
        // 创建Dbutils核心工具类对象
        QueryRunner queryRunner = new QueryRunner();
        // 执行sql
        Long num = queryRunner.query(conn, sql, new ScalarHandler<Long>());
        // 输出结果
        System.out.println("总共有:"+num+"条数据");
        // 关闭数据库连接资源
        DbUtils.close(conn);
    }
运行结果:
总共有:3条数据
//MapHandler  查询返回结果的第一条记录封装为map
    @Test
    public void test9() throws Exception {
        // 创建数据库连接对象
        Connection conn = JdbcUtil.getConnection();
        // 创建sql语句
        String sql = "select * from student";
        // 创建Dbutils核心工具类对象
        QueryRunner queryRunner = new QueryRunner();
        // 执行sql
        Map<String, Object> map = queryRunner.query(conn, sql, new MapHandler());
        // 输出结果
        Set<String> keySet = map.keySet();
        for(String key : keySet){
            Object value = map.get(key);
            System.out.println(key+"="+value);
        }
        // 关闭数据库连接资源
        DbUtils.close(conn);
    }
运行结果:
id=1
sname=陈柯佛
gender=男
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值