您的位置:首页 > 博客中心 > 数据库 >

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

时间:2022-03-14 01:59

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 }

 

     

    

本类排行

今日推荐

热门手游