数据库工具--DBUtils工具类的使用

1. DBUtils概述

  DBUtils 是 JDBC的一个简化开发工具包.使用DBUtils需要导入的jar包:commons-dbutils-1.4.jar

  核心类:QueryRunner

  包 org.apache.commons.dbutils
  java.lang.Object
    |--org.apache.commons.dbutils.AbstractQueryRunner
        |--org.apache.commons.dbutils.QueryRunner

  

  构造方法:

    QueryRunner(DataSource ds),接收数据源,可使用DBCP,C3P0等工具获得.

  常用API:

    1. 查询

    <T> T query(String sql, ResultSetHandler<T> rsh, Object... params)

      执行sql中封装的查询语句,sql语句采用预处理对象带参形式,将sql语句中的参数通过params传入,并返回结果对象,根据ResultSetHandler传入的实现类不同,结果对象可以是对象集合或者单个对象

    <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)

      这个方法可使得调用者控制连接的获得与关闭,并可同时开启一个事务.

    2. 更新

    int update(String sql, Object... params)

      可以进行插入,更新,删除等操作.返回被影响的数据条数.

    int update(Connection conn, String sql, Object... params)

      这个方法可使得调用者控制连接的获得与关闭,并可同时开启一个事务.

  

    3.关于结果集处理

  

    Interface ResultSetHandler<T>

      T为作为输入的结果集将要转换成的目标对象类型.

      T handle(ResultSet rs) 该方法接收sql语句的查询结果ResultSet,并将结果集转化成具体类型的对象

    ResultSetHandler的三个常用实现类

      a.BeanHandler<T>

        构造方法 :BeanHandler(Class<T> type)

          type为将要目标JavaBean的字节码

        实现方法:T handle(ResultSet rs)

          使用type类型字节码构造一个目标类JavaBean对象,并把查询得到的结果集的第一行的记录的内容封装这个对象中,作为返回值返回给调用者query,并作为query的返回结果.

      b.BeanListHandler<T>

        与BeanHandler类似,只不过是返回的是目标类JavaBean的List集合.

      c.ScalarHandler

        这个类用于处理查询语句中使用聚合函数的情况,使用无参构造函数创建ScalarHandler对象时,它的handle方法将返回查询结果第一列的内容.

  

  DBUtils工具类

    DBUtils工具类提供了一些关于事务操作的方法,可以方便处理异常等.

    static void commitAndClose(Connection conn) throws SQLException提交并关闭,如果有异常抛出

    static commitAndCloseQuietly(Connection conn)  提交并关闭,如果有异常不做任何处理

    static rollbackAndClose(Connection conn) throws SQLException 回滚并关闭,如果有异常抛出

    static rollbackAndCloseQuietly(Connection conn)  回滚并关闭,如果有异常不做任何处理

    

    

2.Demo演示

  使用DBUtils结合C3P0,对数据库分别进行了增删改查的操作,并演示了各个API的用法

  JavaBean的结构如下,为了方便演示,重写了toString方法,数据库表结构与Bean相同.

 

 1 public class User {

 2     private int id;

 3     private String name;

 4     public int getId() {

 5         return id;

 6     }

 7     public void setId(int id) {

 8         this.id = id;

 9     }

10     public String getName() {

11         return name;

12     }

13     public void setName(String name) {

14         this.name = name;

15     }

16     @Override

17     public String toString() {

18         return "User [id=" + id + ", name=" + name + "]";

19     }

20 }


数据库的操作如下:(C3P0获取数据源的操作省略)

 1 package com.itheima.dbutils;

 2 

 3 import java.sql.SQLException;

 4 import java.util.List;

 5 

 6 import org.apache.commons.dbutils.QueryRunner;

 7 import org.apache.commons.dbutils.handlers.BeanHandler;

 8 import org.apache.commons.dbutils.handlers.BeanListHandler;

 9 import org.apache.commons.dbutils.handlers.ScalarHandler;

10 import org.junit.Test;

11 

12 public class DBUtilsDemo {

13     QueryRunner runner = new QueryRunner(C3P0Utils.getDataSource());

14     @Test

15     public void add(){

16         try {

17             String sql = "insert into t_user(name) values(?)";

18             Object[] params = {"White"};

19             int r = runner.update(sql,params);

20             System.out.println(r);

21         } catch (SQLException e) {

22             throw new RuntimeException(e);

23         }

24     }

25     @Test

26     public void delete(){

27         try {

28             String sql = "delete from t_user where id=?";

29             Object[] params = {4};

30             int r = runner.update(sql,params);

31             System.out.println(r);

32         } catch (SQLException e) {

33             throw new RuntimeException(e);

34         }

35     }

36     @Test

37     public void update(){

38         try {

39             String sql = "update t_user set name=? where id=?";

40             Object[] params = {"Jane",2};

41             int r = runner.update(sql,params);

42             System.out.println(r);

43         } catch (SQLException e) {

44             throw new RuntimeException(e);

45         }

46     }

47     @Test

48     public void select1(){

49         try {

50             String sql = "select * from t_user  where id=?";

51             Object[] params = {2};

52             User user= runner.query(sql,new BeanHandler<User>(User.class),params);

53             System.out.println(user);

54         } catch (SQLException e) {

55             throw new RuntimeException(e);

56         }

57     }

58     @Test

59     public void select2(){

60         try {

61             String sql = "select * from t_user ";

62             Object[] params = {};

63             List<User> userList= runner.query(sql,new BeanListHandler<User>(User.class),params);

64             for(User user:userList)

65             System.out.println(user);

66         } catch (SQLException e) {

67             throw new RuntimeException(e);

68         }

69     }

70     @Test

71     public void select3(){

72         try {

73             String sql = "select count(*) from t_user ";

74             Object[] params = {};

75             Long count=(Long) runner.query(sql,new ScalarHandler(),params);

76             System.out.println(count);

77         } catch (SQLException e) {

78             throw new RuntimeException(e);

79         }

80     }

81 }

 

     

    

你可能感兴趣的:(DbUtils)