JDBC连接------DbUtils工具包的使用

JDBC连接------DbUtils工具包的使用

目录

 

1、DbUtils是什么?

2、DbUtils官网下载链接

 3、DbUtils核心类

3.1、QueryRunner 中提供了对sql语句的操作的api

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

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

3.3、DbUtils类,它就是一个工具类,定义了关闭资源与事物处理的方法

总结:


1、DbUtils是什么?

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

2、DbUtils官网下载链接

http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi

 图(2-1)

 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连接池”中写的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) {
            ;
        }

    }

总结:

使用DbUtils操作数据库极大的减少了代码量。整个人都好很多了!

能力尚浅,有待进步,如有不足,不吝赐教!

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值