Dbutils的使用

    科技2025-10-09  18

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

    2、DbUtils官网下载链接 http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi

    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) { ; }

    }
    Processed: 0.009, SQL: 8