码迷,mamicode.com
首页 > 数据库 > 详细

java基础之JDBC九:DbUtils的简介及使用

时间:2018-06-13 23:30:03      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:数据   col   封装   eth   子类   double   sql   失败   long   

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

使用步骤:

A: 获取可以执行SQL语句的对象.
    public QueryRunner();
    public QueryRunner(DataSource ds);    //如果需要用到连接池对象了, 会自动从数据库连接池中获取.

B: 执行SQL语句, 获取结果集.
    *** query(String sql,ResultSetHandler rsh, Object... values);        //执行查询语句
        ResultSetHandler: //是一个接口, 表示对 结果集的处理方式, 传入的参数不同, 返回值也不同.
    int update(String sql,Object... values);                            //执行更新语句
    
C: 操作结果集.


//可变参数的底层其实是一个: 数组.
ResultSetHandler接口的子类:
    ArrayHandler        将结果集第一行转成对象数组        Object[]
    ArrayListHandler                                    List<Object[]>
            将结果集中的每一行数据都转成一个对象数组,再将转成的多个对象数组存放到List中

    BeanHandler            将结果集第一行数据封装到一个对应的业务类实例中
                        //  new BeanHandler<业务类的类型>(业务类的字节码文件对象);
                        //  new BeanHandler<Ledger>(Ledger.class);
    BeanListHandler        
            将结果集中的每一行数据都封装到一个对应的业务类实例中,再将多个业务类实例对象存放到List里。
            //  new BeanListHandler<业务类的类型>(业务类的字节码文件对象);
            //  new BeanListHandler<Ledger>(Ledger.class);
    MapHandler            将结果集中的第一行数据封装到一个Map中,key是列名 String ,value是对应的值 Obje
    MapListHandler        将结果集中的每一行数据都封装到一个Map里,然后再将多个Map存放到List

    ColumnListHandler    将结果集中的指定列的数据存储到List集合
           //new ColumnListHandler<该列的类型_写的是引用类型>(列名);
           //new ColumnListHandler<Double>("money");
    ScalarHandler        进行单值查询,如:select count(*) from    //一行一列
        //new ScalarHandler<该列的类型_写的是引用类型>(列名);
        //new ScalarHandler<Long>("counts");   求满足条件的数据共有多少行
    KeyedHandler        将结果集中的每一行数据都封装为一个Map(Map<String,Object>),
                        再将这些Map再存到一个Map里,其key为KeyedHandler指定的列,
                        如果没有指定则使用第一个查询的字段。
        /*
                    1      2                                                            3     4    
            Map <String,Map<String,Object>> map= qr.query(conn, sql, new KeyedHandler<String>("lid"));

            1:代表的是 传入的指定的列名(要求不能重复,一般传的是主键)
            2:代表的是 数据库表中的每一行数据(列名做键,具体的数据做值)
            3:代表的是 传入的指定的列的 数据类型
            4:代表的是 传入的指定的列
        
        */

使用DbUtils执行更新操作:

/**
 * 使用DbUtils执行更新操作
 * 使用之前需要导入jar包
 */
public class Test06 {
    public static void main(String[] args) {
        //获取可执行sql语句的对象
        //这里构造函数里需要传一个连接池对象 我们使用之前封装的C3P0简单工具类获取一个连接池对象
        QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
        //执行sql语句 获取返回结果
        String sql = "UPDATE users SET psw = ? WHERE uid = ?";
        try {
            Object[] obj = {null, "亚索", "hasagei"};
            int num = qr.update(sql, obj);
            System.out.println(num > 0 ? "添加成功" : "添加失败");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        //不用再close了 因为DbUtils帮我们做了
    }
}

使用DbUtils执行查询操作:

 

java基础之JDBC九:DbUtils的简介及使用

标签:数据   col   封装   eth   子类   double   sql   失败   long   

原文地址:https://www.cnblogs.com/Alex-zqzy/p/9180394.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!