Dbutils的使用

1、DbUtils是什么?
DbUtils是apache下的一个JDBC轻量级封装的工具包,其最核心的特性就是结果集的封装,简化jdbc连接DAO层到的操作,可以直接将sql查询出来的结果集封装成javaBean。大大简化了程序员的工作量。

2、DbUtils官网下载链接
http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi
在这里插入图片rr描述

3、DbUtils核心类
DBUtils的三个核心类

QueryRunner,ResultSetHandler,DbUtils.

3.1、QueryRunner 中提供了对sql语句的操作的api
第一种操作sql方法 提供数据源

   构造方法 QueryRunner(DataSource) 创建核心类,并提供数据源(连接池),内部自己维护Connection

   普通方法:

          update(String sql,Object...params) 执行数据库DML语句

          query(String sql,ResultSetHandler,Object...params) 执行数据库DQL语句,并将查询结果封装到对象中

第二种操作SQL方法 不提供数据源,但提供链接

   构造方法 QueryRuner() 创建核心类,没有提供数据源(连接池),在进行具体操作时,需要手动提供Connection

   普通方法:

update(Connection conn,String sql ,Object … params)

query(Connection conn,String sql,ResultSetHandler,Object…parms)

3.2、ResultSetHandler接口,用于定义select操作后,怎样封装结果集
常用的方法:

ArrayHandler :将结果中的第一条记录封装到一个指定的数组中

ArrayListHandler :将结果集中的每一条记录以数组形式都封装到一个指定的集合中

BeanHandler :将结果集中的第一条记录封装到一个指定的javaBean中

BeanListHandler :将结果集中的每一条记录封装到指定的javaBean总,将这些javaBean再封装到List集合中

ScalarHandler :它是用于单个数据。例如select count(*) from students

ColumnListHandler : 将结果集中指定的列字段值,封装到一个List集合中

3.2.1、常用方法的测试代码如下(2-1-1)
public class Test {

public static void main(String[] args) throws SQLException {

// array();
arrayList();
// bean();
// beanList();
// scalar();
// columnList();
}

/*
    ArrayHandler
        将结果集的第一条记录添加到一个Object数组中
    查询1条结果时使用
    查询uid=3的user的记录
 */
public static void array() throws SQLException {
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSouce());
    String sql = "select * from students ";

    Object[] objs = qr.query(sql, new ArrayHandler());
    System.out.println(Arrays.toString(objs));
}


/*
    ArrayListHandler
        将结果集的每条记录都添加到一个Object数组中
        将多个Object数组放入到一个List集合中
    查询多条记录时使用
    查询所有users中的记录
 */
public static void arrayList() throws SQLException {
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSouce());
    String sql = "select * from students";
    List<Object[]> list = qr.query(sql,new ArrayListHandler());

    for (Object[] objects : list) {
        System.out.println(Arrays.toString(objects));
    }
}

/*
    BeanHandler
        将结果集的第一条记录封装到一个指定的javaBean对象中
      查询1条结果时使用
      查询uid=3的user的记录
 */
public static void bean() throws SQLException {
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSouce());
    String sql = "select * from users where uid = ?";
    //创建BeanHandler对象指定数据封装到User对象中
    User u = qr.query(sql,new BeanHandler<User>(User.class),3);
    System.out.println(u);

}

/*
    BeanListHandler
        将结果集的每一条记录都封装到一个指定的javaBean对象中
        然后将多个对象 放入一个list集合中
     查询多条记录时使用
 */
public static void beanList() throws SQLException {
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSouce());
    String sql = "select * from students";
    List<User> list = qr.query(sql,new BeanListHandler<User>(User.class));

    for (User user : list) {
        System.out.println(user);
    }
}

/*
    ScalarHander
        一般用于单个数据的获取
        构造方法
            ScalarHander() 只有一个结果时
            ScalarHander(列名)
            ScalarHander(第几列)

     查询users表中有多少条记录
 */
public static void scalar() throws SQLException {
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSouce());
    String sql = "select count(*) from users";
    long l = qr.query(sql,new ScalarHandler<Long>());
    System.out.println(l);
}

/*
    ColumnListHandler
        将指定列的数据 放入到一个list集合中
        ColumnListHandler() 查询结果只有一列时使用
        ColumnListHandler(列名)
        ColumnListHandler(第几列)
     查询所有的用户名
 */
public static void columnList () throws SQLException {
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSouce());

    String sql = "select * from students";
    List<String> list =  qr.query(sql,new ColumnListHandler<String>());
    System.out.println(list);
}

}
代码中使用的C3P0Utils工具类
JDBC连接------C3P0连接池

3.3、DbUtils类,它就是一个工具类,定义了关闭资源与事物处理的方法
常用方法(源码+注释)

//关闭连接
public static void close(Connection conn) throws SQLException {
    if (conn != null) {
        conn.close();
    }

}

//关闭结果集
public static void close(ResultSet rs) throws SQLException {
    if (rs != null) {
        rs.close();
    }

}

//关闭执行sql的对象
public static void close(Statement stmt) throws SQLException {
    if (stmt != null) {
        stmt.close();
    }

}

//安静的关闭,后台会自动处理异常,没有Quietly关键字的close方法不会自动处理异常
  public static void closeQuietly(Connection conn, Statement stmt, ResultSet rs) {
    try {
        closeQuietly(rs);
    } finally {
        try {
            closeQuietly(stmt);
        } finally {
            closeQuietly(conn);
        }
    }

}

//事务提交并安静的关闭
public static void commitAndCloseQuietly(Connection conn) {
try {
commitAndClose(conn);
} catch (SQLException var2) {
;
}

}

//事务回滚并安静的关闭

public static void rollbackAndCloseQuietly(Connection conn) {
try {
rollbackAndClose(conn);
} catch (SQLException var2) {
;
}

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值