zoukankan      html  css  js  c++  java
  • DbUtils基本使用

    1.DbUtils介绍

      DbUtils库是一套小巧的用来简化 JDBC 调用的库。JDBC源代码库单调且易出错,所以DBUtils 类抽象出所有简单的任务,让你更专注于使用JDBC做Query和Update的工作。

      DbUtils的优势:

    Some of the advantages of using DbUtils are:

    • 不会资源泄露。更正JDBC代码并不困难,但是却非常耗时且单调。这通常会造成难以追踪的Connection泄露。
    • 清爽整洁的代码。访问数据库的代码会大量的减少。剩下的代码更简介的表达了你的意图。
    • JavaBean属性自动从ResultSet中填充值。不用手动调用setXxx为属性赋值。

      在使用JDBC访问数据库是,有大量重复的代码(注册驱动,获取连接,访问数据库,处理结果集,释放资源等)DbUtils抽象并封装了这些操作,方便开发人员DAO操作。

    2.DbUtils结构

      DbUtils

      JDBC Helper 方法的集合,线程安全。

      控制事务,数据库连接,驱动加载等。

      构造函数: public DbUtils()

      QueryRunner

      使用插拔策略执行SQL查询,线程安全。

      构造函数:

    • QueryRunner()
    • QueryRunner(boolean pmdKnownBroken)
    • QueryRunner(DataSource ds)
    • QueryRunner(DataSource ds,boolean pmdKnownBroken)

      QueryRunner核心:

    • update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作
    • query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作

      ResultSetHandler<T>接口

      这个接口的实现类,转换查询结果为对象。

      主要实现类:

    • ArrayHandler:结果集第一行放入Object[]数组中,数组中的元素依次是各个字段的值
    • ArrayListHandler:结果集每一行放入Object[]数组中,数组中的元素依次是各个字段的值。并将Object[]封装到一个集合List中。
    • BeanHandler:将结果集中的第一行放入指定的JavaBean对象中。
    • BeanListHandler:将结果集中的每一行放入指定的JavaBean对象中,并将这些对象封装到List中。
    • ColumnListHandler:将结果集中指定字段的值封装到一个List中
    • ScalarHandler:用于但数据处理,如avg,sum,count等
    • MapHandler:将结果集第一行封装到Map集合中,Key 列名, Value 该列数据
    • MapListHandler:将结果集第一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合

    3.DbUtils实现增删改查

      3.1 增删改:调用Update方法

    复制代码
      public static void insert() {
            try {
                //新建QueryRunner对象
                QueryRunner qr = new QueryRunner();
                //执行的Sql语句
                String sql = "insert into Student (sname,age)values(?,?)";
                //参数,可以使用Object数组,也可以直接写
                Object[] params = { "王六", 22 };
                //执行Update,返回受影响的记录
           Connection conn = getConnection();
    int result = qr.update(conn,sql, params); System.out.println(result);
           conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } }
    复制代码

      3.2查询

      3.2.1 使用ArrayHander和ArrayListHandler操作结果集,结果集为空则返回[ ]空集合

    复制代码
    public static void QueryByArrayHandler() {
            try {
                QueryRunner qr = new QueryRunner();
                String sql = "select * from Student ";
           Connection conn = getConnection(); Object[] result = qr.query(conn, sql, new ArrayHandler()); System.out.println(result); System.out.println(Arrays.toString(result));        conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } } public static void QueryByArrayListHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from Student";
           Connection conn = getConnection(); List<Object[]> result = qr.query(conn, sql, new ArrayListHandler()); System.out.println(result); for (Object[] objs : result) { System.out.println(Arrays.toString(objs)); }
           conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } }
    复制代码

      

      3.2.2 BeanHandler和BeanListHandler

    复制代码
       public static void QueryByBeanHandler() {
            try {
                QueryRunner qr = new QueryRunner();
                String sql = "select * from student where id>10";
           Connection conn = getConnection(); Student s = qr.query(conn, sql, new BeanHandler<Student>(Student.class)); System.out.println(s);
           conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } } public static void QueryByBeanListHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from student";
           Connection conn = getConnection(); List<Student> stus = qr.query(conn, sql, new BeanListHandler<Student>(Student.class)); for (Student s : stus) { System.out.println(s.ToString()); }
           conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } }
    复制代码

      3.3.3 ColumnHandler和ScalarHandler

    复制代码
       public static void QueryByColumnListHandler()
        {
            try {
                QueryRunner qr = new QueryRunner();
                String sql = "select * from student ";
           Connection conn = getConnection(); List<String> names = qr.query(conn, sql, new ColumnListHandler<String>("sname")); for (String name : names) { System.out.println(name); }        conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } } public static void QueryByScalarHandler(){ try { QueryRunner qr = new QueryRunner(); String sql = "select count(*) from student ";
           Connection conn = getConnection(); //new ScalarHandler<Long>() 内部应该是用的Long,所以泛型用Long long num = qr.query(conn, sql, new ScalarHandler<Long>()); System.out.println(num);
           conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } }
    复制代码

      

      3.3.4 MapHandler和MapListHandler :返回的Map是有序的

    复制代码
      public static void QueryByMapHandler() {
            try {
                QueryRunner qr = new QueryRunner();
                String sql = "select * from student ";
           Connection conn = getConnection(); Map<String, Object> data = qr.query(conn, sql, new MapHandler()); // Map的类型:org.apache.commons.dbutils.BasicRowProcessor$CaseInsensitiveHashMap // 继承自LinkedHashMap<String, Object>,所以它是有序的 System.out.println(data.getClass()); for (String key : data.keySet()) { System.out.println(data.get(key)); }
           conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } } public static void QueryByMapListHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from student ";
           Connection conn = getConnection(); List<Map<String,Object>> data = qr.query(conn, sql, new MapListHandler()); for (Map<String,Object> map : data) { //map的类型:org.apache.commons.dbutils.BasicRowProcessor$CaseInsensitiveHashMap //继承自LinkedHashMap<String, Object>,所以它是有序的 System.out.println(map.getClass()); for(String key:map.keySet()){ System.out.println(map.get(key)); } }
           conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } }
    复制代码
  • 相关阅读:
    js获取当前时间
    报错: unable to register MBean
    elasticsearch UNASSIGNED 处理
    esql
    记一次shell脚本编写及执行
    elasticsearch _script 脚本排序
    六大类常用的专业搜索工具
    动态设置所有string字段不分词
    @ResponseBody和@RequestBody使用
    Request method 'POST' not supported
  • 原文地址:https://www.cnblogs.com/icebutterfly/p/9247651.html
Copyright © 2011-2022 走看看