Java个人总结——(Apache)DbUtils的使用

本文介绍DBUtils,一个简化JDBC操作的工具包,通过多种ResultSetHandler实现对数据库的便捷读写,包括ArrayHandler、BeanHandler等,并提供QueryRunner类执行SQL语句。
摘要由CSDN通过智能技术生成

DBUtils

Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。

DBUtils简介

DBUtils是java编程中的数据库操作实用工具,小巧简单实用,

1.对于数据表的读操作,可以把结果转换成List,Array,Set等java集合,便于程序员操作。

2.对于数据表的写操作,也变得很简单(只需写sql语句)。

DBUtils包括主要类

  • DbUtils类:启动类

  • ResultSetHandler接口:转换类型接口,用于你想要将取出的数据转换成什么类型,以下为该接口的实现类

    --ArrayHandler类:返回一行记录,把记录中的每个值存放到一个Object数组中并返回。

    --ArrayListHandler类:返回多行记录,每一行记录存放入一个Object数组中,然后将数组封装到List集合中返回。

    --ColumnListHandler类:取某一列的数据。封装到List中。

    --ScalarHandler类:适合获取一行一列数据,一般用于接收返回的统计结果。比如count(*)统计行数。

    --BeanHandler类:把记录保存到相应的JavaBeen中转成对象。

    --BeanListHandler类:把记录转化成List,使记录为JavaBean类型的对象

    --MapHandler类:实现类,返回一行数据,将列名称作为key,对应的值作为value

    --MapListHandler类:返回多行数据,每一行记录为一个Map集合,然后将Map集合封装到List当中返回。
  • QueryRunner类:执行SQL语句的类

    实例化该类时需要传入一个数据库的连接(Connection的对象)

DBUtils的使用步骤:

  • 创建项目

  • 导入jar包 工具类 配置文件
    commons-dbutils-1.6.jar

  • 创建QueryRunner对象

  • 使用对象执行SQL语句

实例:

使用Druid连接池常见工具类,具体方法见JDBC数据库连接池

public class DataSourceUtils {
    public static DataSource ds = null ;
    static {
        InputStream is = DataSourceUtils.class.getClassLoader().getResourceAsStream("druid.properties") ;
        Properties pro = new Properties() ;
        try {
            pro.load(is);
            ds = DruidDataSourceFactory.createDataSource(pro) ;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static DataSource getDataSource() {
        return ds ;
    }
}

编写测试类对DbUtils进行测试:

public class DbUtilsTest {

    @Test
    //查询一行数据ArrayHandler
    public void testArrayHandler() throws Exception{
        //创建QueryRunner对象
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        //执行SQL语句,使用预编译SQL语句 :qr.query(String sql, ResultSetHandler rsh,Object...params);
        //使用完整SQL语句:qr.query(String sql, ResultSetHandler rsh);
        Object[] o = qr.query("select * from emp where empno=?", new ArrayHandler(),9898) ;
        for (Object object : o) {
            System.out.print(object + "  ");
        }

    }
    @Test
    //查询多行数据ListArrayHandler
    public void testListArrayHandler() throws Exception{
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        List<Object[]> list = qr.query("select * from emp", new ArrayListHandler()) ;
        list.forEach(object ->{
            for (Object o : object) {
                System.out.print(o + " ");
            }
            System.out.println();
        });
    }
    @Test
    //查询一行数据BeanHandler
    public void testBeanHandler() throws Exception{
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        Employee emp = qr.query("select * from emp where empno=9898", new BeanHandler<Employee>(Employee.class)) ;
        System.out.println(emp);
    }
    @Test
    //查询多行数据BeanListHandler
    public void testBeanListHandler() throws Exception{
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        List<Employee> list = qr.query("select * from emp", new BeanListHandler<>(Employee.class)) ;
        list.forEach(System.out::println);
    }
    @Test
    //查询一列数据ColumnListHandler
    public void testColumnListHandler() throws Exception{
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        List<String> ename = qr.query("select ename from emp", new ColumnListHandler<String>(1)) ;
        ename.forEach(System.out::println);
    }
    @Test
    //返回一行一列数据ScalarHandler()
    public void testScalarHandler() throws Exception{
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        long count = qr.query("select count(*) from emp", new ScalarHandler<Long>()) ;
        System.out.println(count);
    }
    @Test
    //插入一条数据update()
    public void testInsert() throws Exception{
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        Employee e = new Employee(9896, "李春华", "歌姬", 6565, new Date(), 2000, 0, 70) ;
        int len = qr.update("INSERT INTO emp VALUES (?,?,?,?,?,?,?,?)", e.getEmpno(),e.getEname(),e.getJob(),e.getMgr(),e.getHiredate(),e.getSal(),e.getComm(),e.getDeptno()) ;
        if (len>0) {
            System.out.println("添加成功");
        } else {
            System.out.println("添加失败");
        }
    }
    @Test
    //更新一条数据Update()
    public void testUpdate() throws Exception{
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        int len = qr.update("UPDATE emp SET job=? WHERE empno=?", "歌姬",9896) ;
        if (len > 0) {
            System.out.println("更改成功");
        } else {
            System.out.println("更改失败");
        }
    }
    @Test 
    //删除一条数据Update()
    public void testDelete() throws Exception{
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        int len = qr.update("DELETE FROM emp WHERE empno = ?",9896) ;
        if (len > 0) {
            System.out.println("删除成功");
        } else {
            System.out.println("删除失败");
        }
    }
}

注:当我们使用预编译SQL语句时,要在对应方法的最后面加入相应的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值