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(""); } }
复制代码

猜你喜欢

转载自www.cnblogs.com/icebutterfly/p/9247651.html