DBUtils的使用

DBUtils是jdbc的简化开发工具包。需要我们导入commons-dbutils-1.4.jar的包 


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

DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。

Dbutils三个核心功能介绍

   l  QueryRunner中提供对sql语句操作的API.

   l  ResultSetHandler接口,用于定义select操作后,怎样封装结果集.

   l  DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法


QueryRunner

构造方法

  QueryRunner(DataSource) 创建核心类,并提供数据源,内部自己维护Connection

普通方法

   update(String sql , Object ... params) 执行DML语句
   query(String sql , ResultSetHandler , Object ... params) 执行DQL语句,并将查询结果封装到对象中。


准备

1.准备的表

create table product(

    pid intprimary key,

    pnamevarchar(20),

    pricedouble,

    category_idvarchar(32)

);

2.准备数据

INSERTINTO product(pid,pname,price,category_id) VALUES(1,'联想',5000,'c001');

INSERTINTO product(pid,pname,price,category_id) VALUES(2,'海尔',3000,'c001');

INSERTINTO product(pid,pname,price,category_id) VALUES(3,'雷神',5000,'c001');

 

INSERTINTO product(pid,pname,price,category_id) VALUES(4,'JACK JONES',800,'c002');

INSERTINTO product(pid,pname,price,category_id) VALUES(5,'真维斯',200,'c002');

INSERTINTO product(pid,pname,price,category_id) VALUES(6,'花花公子',440,'c002');

INSERTINTO product(pid,pname,price,category_id) VALUES(7,'劲霸',2000,'c002');

 

INSERTINTO product(pid,pname,price,category_id) VALUES(8,'香奈儿',800,'c003');

INSERTINTO product(pid,pname,price,category_id) VALUES(9,'相宜本草',200,'c003');

INSERTINTO product(pid,pname,price,category_id) VALUES(10,'面霸',5,'c003');


注意:

  update(String sql, Object... params),用来完成表数据的增加、删除、更新操作

//增加数据

@Test

public void insert() throwsSQLException{

    //获取一个用来执行SQL语句的对象   QueryRunner

    QueryRunnerqr = newQueryRunner(C3P0Utils.getDataSource());

       

    String sql = " INSERT INTO product(pid,pname,price,category_id)VALUES(?,?,?,?);";

    Object[] params = {100,"百岁山", 5500, "c005"};

    int line = qr.update(sql,params);// 用来完成表数据的增加、删除、更新操作

    //结果集处理

    System.out.println("line= " + line);

}


//更新数据

@Test

public void update() throws SQLException{

    //1 核心类

    QueryRunnerqueryRunner = new QueryRunner(C3P0Utils.getDataSource());

    //2 准备sql语句

    String sql= "update product set pname=?,price=?,category_id=? where pid=?";

   

    //3 准备实际参数

    Object[]params = {"芒果99","998","c009",13};

   

    //4 执行

    int r =queryRunner.update(sql, params);

    System.out.println(r);

   

}



//删除数据

@Test

public void demo04() throws SQLException{

   

    QueryRunnerqueryRunner = new QueryRunner(C3P0Utils.getDataSource());

    String sql= "delete from product where pid = ?";

    Object[]params = {99};

    int r =queryRunner.update(sql, params);

    System.out.println(r);

          

}



QueryRunner

    query(String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作

    ResultSetHandler下面的子类
     

ArrayHandler

将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值

ArrayListHandler

将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。

BeanHandler

将结果集中第一条记录封装到一个指定的javaBean中。

BeanListHandler

将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中

ColumnListHandler

将结果集中指定的列的字段值,封装到一个List集合中

KeyedHandler

将结果集中每一条记录封装到Map<String,Object>,在将这个map集合做为另一个Map的value,另一个Map集合的key是指定的字段的值。

MapHandler

将结果集中第一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值

 

MapListHandler

将结果集中每一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值,在将这些Map封装到List集合中。

ScalarHandler

它是用于单数据。例如select count(*) from 表操作。


操作代码

//Bean

publicclass Product {

   

    private String pid;

    private String pname;

    private Double price;

    private String category_id;

 

    //省略 gettersetter方法

}


//BeanHandler

/*

     * 查询数据表结果集处理其中一种方式:

     *  BeanHandler处理方式

     *     将数据表的结果集第一行数据,封装成JavaBean类的对象

     *   构造方法:

     *   BeanHandler(Class<T> type)

     *    传递一个Class类型对象,将结果封装到哪个类的对象呢

     *   ZhangWu类的Class对象

     */

@Test

public void demo01() throwsSQLException{

    // 通过id查询详情,将查询结果封装到JavaBean product

   

    //1核心类

    QueryRunner queryRunner = newQueryRunner(C3P0Utils.getDataSource());

    //2 sql语句

    String sql = "select * from product where pid = ?";

    //3 实际参数

    Object[] params = {6};

    //4 查询并封装

    Product product = queryRunner.query(sql, newBeanHandler<Product>(Product.class), params);

   

    System.out.println(product);

}


// BeanListHandler处理方式

/*

     * 查询数据表结果集处理其中一种方式:

     *  BeanListHandler处理方式

     *     将数据表的每一行数据,封装成JavaBean类对象

     *     多行数据了,多个JavaBean对象,存储List集合

     */

@Test

public void demo02() throwsSQLException{

    //查询所有,将每一条记录封装到一个JavaBean,然后将JavaBean添加到List中,最后返回ListBeanListHandler

    QueryRunner queryRunner = newQueryRunner(C3P0Utils.getDataSource());

    String sql = "select * from product";

    Object[] params = {};

    List<Product> list = queryRunner.query(sql, newBeanListHandler<Product>(Product.class), params);

   

    for(Product product : list){

        System.out.println(product);

    }

}


//ScalarHandler处理方式

/*

     * 查询数据表结果集处理其中一种方式:

     *   ScalarHandler处理方式

     *     处理单值查询结果,执行的select语句后,结果集只有1个

     */

@Test

public void demo03() throwsSQLException{

    // ScalarHandler : 用于处理聚合函数执行结果(一行一列)

    // * 查询总记录数

    QueryRunner queryRunner = newQueryRunner(C3P0Utils.getDataSource());

    String sql = "select count(*) from product";

   

    Long obj = queryRunner.query(sql, newScalarHandler<Long>());

   

    //System.out.println(obj.getClass());

    System.out.println(obj);


}

//MapHandler处理方式

/*

     * 查询数据表结果集处理其中一种方式:

     *  MapHandler处理方式

     *     将数据表结果集的第一行数据,封装成Map集合

     *   键: 数据表中的列

     *   值: 这个列中的数据

     *  

     *   处理方式的Map集合,是LinkedHashMap的子类

     */

@Test

public void demo04() throwsSQLException{

    // MapHandler 将查询到的一条记录,封装到Map中,map.key=字段名,map.value=

    // * 主要用途:多表操作、将数据转换json

    QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());

    String sql = "select * from product where pid = ?";

    Object[] params = {6};

    Map<String,Object> map = queryRunner.query(sql, newMapHandler(), params);

   

    System.out.println(map);

    // Map数据封装到指定JavaBean

   

}


// MapListHandler处理方式

/*

     * 查询数据表结果集其中一种处理方式:

     *  MapListHandler处理方式

     *     将数据表的结果集的每一行封装成Map集合

     *     数据表多行数据,出现多个Map集合,存储List集合

     */

@Test

public void demo05() throws SQLException{

    //MapListHandler : 查询所有数据,将每一条记录封装到Map中,然后将Map添加到List中,最后返回List

    // * 主要用途:多表操作 等

    QueryRunnerqueryRunner = new QueryRunner(C3P0Utils.getDataSource());

    String sql= "select * from product";

    List<Map<String,Object>>list = queryRunner.query(sql, new MapListHandler());

   

    for(Map<String,Object>map : list){

        System.out.println(map);

    }

   

}

//ArrayHandler处理方式


/*

     *  查询数据表结果集处理其中一种方式:

     * ArrayHandler处理方式

     *    将数据表中的第一行数据,存储到对象数组Object[]中

     * 

     *  注意: 获取查询后的第一行数据,如果查询不到结果集,返回的对象数组的length=0

     */

@Test

public void demo06() throwsSQLException{

    // ArrayHandler :查询一条记录,将数据封装到数组中

    QueryRunner queryRunner = newQueryRunner(C3P0Utils.getDataSource());

    String sql = "select * from product where pid = ?";

    Object[] params = {6};

    Object[] arr = queryRunner.query(sql, new ArrayHandler(),params);

   

    System.out.println(arr);

    System.out.println(Arrays.toString(arr));

}


//ArrayListHandler处理方式

/*

     * 查询数据表结果集处理其中一种方式:

     * ArrayListHandler处理方式

     *  将数据表中的每一行数据,存储到一个对象数组Object[]中

     *  而数据表中会有多行数据,产生多个对象数组, 存储到List集合中

     */

@Test

public void demo07() throwsSQLException{

    // ArrayListHandler :查询所有,将每一条记录封装到数组中,然后添加到List,最后返回list

    QueryRunner queryRunner = newQueryRunner(C3P0Utils.getDataSource());

    String sql = "select * from product";

    List<Object[]> list = queryRunner.query(sql, newArrayListHandler());

 

    for(Object[] arr : list){

        System.out.println(Arrays.toString(arr));

    }

}




//KeyedHandler 


@Test

public void demo08() throws SQLException{

    //KeyedHandler : newKeyedHandler("字段名称"),查询所有,将查询结果封装到Map中

    // *map.key=为指定“字段名称”对应的值

    // *map.value=为当前整条记录所有的值,数据为Map<字段名,值>

    // 类型 Map<String , Map<String,Object> >

    QueryRunnerqueryRunner = new QueryRunner(C3P0Utils.getDataSource());

    String sql= "select * from product";

    Map<String,Map<String,Object>>map = queryRunner.query(sql, newKeyedHandler<String>("pname"));

 

    for(Map.Entry<String,Map<String,Object>> entry : map.entrySet()){

        System.out.println(entry.getKey());

        System.out.println(entry.getValue());

    }

   

}


//ColumnListHandler处理方式


/*

     * 查询数据表结果集处理其中一种方式:

     *  ColumnListHandler处理方式

     *     将查询数据表结果集中的某一列数据,存储到List集合

     *     哪个列不清楚,数据类型也不清楚, List<Object>

     * ColumnListHandler构造方法

     *    空参数: 获取就是数据表的第一列

     *    int参数: 传递列的顺序编号

     *   String参数: 传递列名

     *   

     *  创建对象,可以加入泛型,但是加入的数据类型,要和查询的列类型一致

     */

@Test

public void demo09() throwsSQLException{

    // ColumnListHandler 查询指定一列数据

    QueryRunner queryRunner = newQueryRunner(C3P0Utils.getDataSource());

    String sql = "select * from product";

    List<String> list = queryRunner.query(sql, newColumnListHandler<String>("pname"));

 

    System.out.println(list);

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值