zoukankan      html  css  js  c++  java
  • java基础之JDBC九:DbUtils的简介及使用

    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 Test {
        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执行查询操作:

    /**
     * DbUtils执行查询操作
     */
    public class Test {
        public static void main(String[] args) {
            
        }
    
        /**
         * ArrayHandler 把查询的第一条数据封装成Object类型的对象返回
         */
        private static void method1() {
            //获取执行sql的对象
            QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
            //执行sql
            String sql = "SELECT * FROM users WHERE uid = ?";
            try {
                Object[] obj = qr.query(sql, new ArrayHandler(), 1);
                System.out.println(Arrays.toString(obj));
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * ArrayListHandler 把查询的每一条数据封装成Object类型 放到List<Object>中 返回
         */
        public static void method2() {
            //获取执行sql的对象
            QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
            //执行sql
            String sql = "SELECT * FROM users";
            try {
                List<Object[]> list = qr.query(sql, new ArrayListHandler());
                for (Object[] obj : list) {
                    System.out.println(Arrays.toString(obj));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * MapHandler 把第一条数据封装成: Map<String,Object>, 键:数据表的列名做键 值:该列的数据做值
         */
        public static void method3() {
            QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
            String sql = "SELECT * FROM users WHERE uid = ?";
            try {
                Map<String, Object> map = qr.query(sql, new MapHandler(), 1);
                System.out.println(map);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * MapListHandler 把每一条数据封装成Map<String,Object>, 整体放入: List<Map<String,Object>>
         */
        public static void method4() {
            QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
            String sql = "SELECT * FROM users";
            try {
                List<Map<String, Object>> list = qr.query(sql, new MapListHandler());
                for (Map<String, Object> map : list) {
                    System.out.println(map);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * BeanHandler 把第一条数据封装成 JavaBean对象返回
         */
        public static void method5() {
            QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
            String sql = "SELECT * FROM users WHERE uid = ?";
            try {
                Users user = qr.query(sql, new BeanHandler<Users>(Users.class), 1);
                System.out.println(user);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * BeanListHandler 把每一条数据封装成JavaBean 放到List集合中返回
         */
        public static void method6() {
            QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
            String sql = "SELECT * FROM users";
            try {
                List<Users> list = qr.query(sql, new BeanListHandler<Users>(Users.class));
                for (Users user : list) {
                    System.out.println(user);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * ColumnListHandler 根据查询的结果集 把其中一列放到List集合中返回
         */
        public static void method7() {
            QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
            String sql = "SELECT * FROM users";
            try {
                List<Object> list = qr.query(sql, new ColumnListHandler("uname"));
                for (Object obj : list) {
                    System.out.println(obj);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * ScalarHandler 把查询结果的第一行第一列的数据封装成Object返回
         */
        public static void method8() {
            QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
            String sql = "SELECT COUNT(1) FROM users WHERE uid BETWEEN ? AND ?";
            try {
                Object count = qr.query(sql, new ScalarHandler(), 1, 3);
                System.out.println(count);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 把每一条数据封装成Map<String,Object>, 整体放入: Map<指定的列,Map<String,Object>>
         */
        public static void method9() {
            QueryRunner qr = new QueryRunner(C3P0SimpleUtils.getDataSource());
            String sql = "SELECT * FROM users";
            try {
                Map<Object, Map<String, Object>> maps = qr.query(sql, new KeyedHandler("uname"));
                for (Object key : maps.keySet()) {
                    System.out.println(key + "--" + maps.get(key));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    详解java定时任务
    Java之Exception
    Java设计模式
    Java中的static关键字解析
    浅析Java中的final关键字
    深入理解Java的接口和抽象类
    一个故事讲清楚NIO
    Java并发编程:线程池的使用
    Java垃圾回收机制
    ubuntu sublime text 2 破解版
  • 原文地址:https://www.cnblogs.com/blazeZzz/p/9180394.html
Copyright © 2011-2022 走看看