JDBC学习06-DBUtils下载和使用

来源:互联网 发布:司法考试培训班 知乎 编辑:程序博客网 时间:2024/06/05 18:02

一、DBUtils简介
如果只使用JDBC开发,将会存在大量冗余、重复的代码。为了简化JDBC开发,可以使用Apache commons组件的DBUtils。
Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
DBUtils三个核心功能:
1.QueryRunner中提供对sql语句操作的API。
2.ResultSetHandler接口,用于定义select操作后封装结果集。
3.DbUtils类,工具类,定义了关闭资源与事务处理方法。
二、DBUtils常用类和方法
1.QueryRunner核心类常用方法

·QueryRunner(DataSource ds),提供数据源(连接池),DBUtils底层自动维护连接·update(String sql,Object[] params),执行更新数据操作·query(String sql,ResultSetHandler<T> rsh,Object[] params),执行查询

2.ResultSetHandler结果集处理类常用方法

·BeanHandler()      将结果集中第一条记录封装到JavaBean中·BeanListHandler()  将结果集中每一条记录封装的指定的JavaBean中,将这些JavaBean封装到List集合中。·ScalarHandler()      用于单数据。

三、DBUtils的使用

1.使用DBUtils在表中添加数据

 @Test    public void testAddfruit(){        try {            //1.创建核心类            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());            //2.编写SQL语句            String sql = "INSERT INTO fruits VALUES(?,?,?,?)";            //3.为占位符设置值            Object[] params={"s3",109, "mulberry",17.2};            //4.执行添加操作            int rows = qr.update(sql,params);            //5.打印结果            if(rows>0){                System.out.println("添加成功");            }            else {                System.out.println("添加失败");            }        } catch (SQLException e) {            e.printStackTrace();        }    }

操作结果
这里写图片描述
这里写图片描述
2.使用DBUtils修改表中数据

 @Test    public void testUpdate(){        try {            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());            String sql = "UPDATE fruits SET f_price=? where f_id=?";            Object[] params = {16.6,"s3"};            int rows  = qr.update(sql,params);            if(rows>0){                System.out.println("修改成功");            }            else {                System.out.println("修改失败");            }        } catch (SQLException e) {            e.printStackTrace();        }    }

操作结果
这里写图片描述
这里写图片描述
3.使用DBUtils删除表中数据

  @Test    public void testDelete(){        try {            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());            String sql = "DELETE FROM fruits WHERE f_id=?";            Object param = "s3";            int rows = qr.update(sql,param);            if(rows>0){                System.out.println("删除成功");            }            else {                System.out.println("删除失败");            }        } catch (SQLException e) {            e.printStackTrace();        }    }

操作结果
这里写图片描述
4.使用DBUtils查询表中数据
编写JavaBean用于保存查询到的数据

public class Fruit {    private String f_id;    private int s_id;    private String f_name;    private double f_price;    public String getF_id() {        return f_id;    }    public void setF_id(String f_id) {        this.f_id = f_id;    }    public int getS_id() {        return s_id;    }    public void setS_id(int s_id) {        this.s_id = s_id;    }    public String getF_name() {        return f_name;    }    public void setF_name(String f_name) {        this.f_name = f_name;    }    public double getF_price() {        return f_price;    }    public void setF_price(double f_price) {        this.f_price = f_price;    }}

编写查询操作代码(查询所有)

@Test    public void testSelect(){        try {            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());            String sql = "SELECT * FROM fruits";            //查询到的结果保存在集合中            List<Fruit> fruits = qr.query(sql,new BeanListHandler<Fruit>(Fruit.class));            //输出查询结果            for (Fruit fruit:fruits){                System.out.println(fruit.getF_id()+"---"+fruit.getF_name()+"---"+fruit.getF_price());            }        } catch (SQLException e) {            e.printStackTrace();        }    }

操作结果
这里写图片描述
按条件查询

@Test    public void testSelectByf_id(){        try {            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());            String sql = "SELECT * FROM fruits WHERE f_id=?";            //为占位符设置值            Object[] param = {"b1"};            //查询到的结果在对象中            Fruit fruit = qr.query(sql, new BeanHandler<Fruit>(Fruit.class), param);            //输出查询结果            System.out.println(fruit.getF_id()+"---"+fruit.getF_name()+"---"+fruit.getF_price());        } catch (SQLException e) {            e.printStackTrace();        }    }

查询结果
这里写图片描述
单数据查询

@Test    public void testSelectConut(){        try {            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());            String sql = "SELECT COUNT(*) FROM fruits";            Object count = qr.query(sql, new ScalarHandler<>());            System.out.println(count.toString());        } catch (SQLException e) {            e.printStackTrace();        }    }

操作结果
这里写图片描述

5.其他ResultSetHandler简介
我们知道在执行select语句之后得到的是ResultSet,然后我们还需要对ResultSet进行转换,得到最终我们想要的数据。你可以希望把ResultSet的数据放到一个List中,也可能想把数据放到一个Map中,或是一个Bean中。
DBUtils提供了一个接口ResultSetHandler,它就是用来ResultSet转换成目标类型的工具。你可以自己去实现这个接口,把ResultSet转换成你想要的类型。
DBUtils提供了很多个ResultSetHandler接口的实现,这些实现已经基本够用了,我们通常不用自己去实现ResultSet接口了。

1.MapHandler:单行处理器!把结果集转换成Map<String,Object>,其中列名为键!2.MapListHandler:多行处理器!把结果集转换成List<Map<String,Object>>;3.BeanHandler:单行处理器!把结果集转换成Bean,该处理器需要Class参数,即Bean的类型;4.BeanListHandler:多行处理器!把结果集转换成List<Bean>;5.ColumnListHandler:多行单列处理器!把结果集转换成List<Object>,使用ColumnListHandler时需要指定某一列的名称或编号,例如:new ColumListHandler(“name”)表示把name列的数据放到List中。6.ScalarHandler:单行单列处理器!把结果集转换成Object。一般用于聚集查询,例如select count(*) from tab_student。