DBUtils的使用详解

    科技2026-03-16  7

    一、DBUtils简介

    1、什么是DBUtils DBUtils是个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果集封装成JavaBean。 commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,使用dbutils能极大简化jdbc编码的工作量,也不会影响程序的性能。

    2、DBUtils优点 杜绝资源泄露。修正JDBC代码并不困难,但是这是耗时而乏味的,这通常导致连接泄露并且难以跟踪到。   清洁干净的持久化代码。大段的持久化数据到数据库代码彻底精简,剩下的代码清晰地表达了编码的意图。   从ResultSet里自动组装JavaBean。你不再需要手工set每一行每一列的值到bean中,每一行数据都将会以一个Bean实例的形式出现

    二、DBUtils包

    1、org.apache.commons.dbutils (该包中的类主要帮助我们更便捷的操作JDBC) 2、org.apache.commons.dbutils.handlers(该包中的类都是实现org.apache.commons.dbutils.ResultSetHandler接口的实现类) 3、org.apache.commons.dbutils.wrappers(该包中的类主要是封装了对Sql结果集的操作)

    三、DBUtils(两类一接口)

    1、DBUtils类

    DbUtils是一个为做一些诸如关闭连接、装载JDBC驱动程序之类的常规工作提供有用方法的类,它里面所有的方法都是静态的。 这个类里的重要方法有: (1)close() (2)CloseQuietly (3)CommitAndCloseQuietly(Connection conn)

    2、 QureryRunner类

    该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。   QueryRunner类提供了两个构造方法:   (1)一个是一个空构造器;   (2)另一个则拿一个 javax.sql.DataSource 来作为参数。   这个类里的重要方法有: (1)public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数 (2)public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException (3)public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException :执行一个不需要置换参数的查询操作 (4)public int update(Connection conn, String sql, Object[] params) throws SQLException:用来执行一个更新(插入、更新或删除)操作 (5)public int update(Connection conn, String sql) throws SQLException:用来执行一个不需要置换参数的更新操作

    3、ResultSetHandler接口

    该接口用于处理Java.sql.ResultSet,将数据按要求转换为另一种形式。ResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.ResultSet rs)。因此任何ResultSetHandler 的执行需要一个结果集(ResultSet)作为参数传入,然后才能处理这个结果集,再返回一个对象

    四、使用

    public class DBTest { public static void main(String[] args) { insertData(); updateData(); selectData(); deleteData(); insertDataWithParams(1002,"xzj",21); } public static void insertData() { // 获取数据库连接 Connection conn = connectDB(); // 创建SQL执行工具 QueryRunner runner = new QueryRunner(); String sql = "insert into user(userId,userName,age) values(1001,'zx',21)"; int num; try { num = runner.update(conn, sql); System.out.println("成功插入" + num + "条数据!"); } catch (SQLException e) { e.printStackTrace(); } // 关闭数据库连接 DbUtils.closeQuietly(conn); } public static void insertDataWithParams(int userId, String userName, int age) { // 获取数据库连接 Connection conn = connectDB(); // 创建SQL执行工具 QueryRunner runner = new QueryRunner(); String sql = "insert into user(userId,userName,age) values(?,?,?)"; Object[] params = { userId, userName, age }; try { int num = runner.update(conn, sql, params); System.out.println("成功插入" + num + "条数据!"); } catch (SQLException e) { e.printStackTrace(); } DbUtils.closeQuietly(conn); } public static void updateData() { // 获取数据库连接 Connection conn = connectDB(); // 创建SQL执行工具 QueryRunner runner = new QueryRunner(); String sql = "update user set userName='xz' where userId=1001"; try { int num = runner.update(conn, sql); System.out.println("成功更新" + num + "条数据!"); } catch (SQLException e) { e.printStackTrace(); } DbUtils.closeQuietly(conn); } public static void deleteData() { // 获取数据库连接 Connection conn = connectDB(); // 创建SQL执行工具 QueryRunner runner = new QueryRunner(); String sql = "delete from user where userName='xz'"; try { int num = runner.update(conn, sql); System.out.println("成功删除" + num + "条数据!"); } catch (Exception e) { e.printStackTrace(); } DbUtils.closeQuietly(conn); } public static void selectData() { // 获取数据库连接 Connection conn = connectDB(); // 创建SQL执行工具 QueryRunner runner = new QueryRunner(); String sql = "select * from user where userId=1001"; ArrayList<StudentBean> userList; try { userList = runner.query(conn, sql,new BeanListHandler(StudentBean.class)); System.out.println("userList size is:"+userList.size()); for (StudentBean studentBean : userList) { System.out.println(studentBean); } } catch (SQLException e) { e.printStackTrace(); } DbUtils.closeQuietly(conn); } public static Connection connectDB() { String driverClassName = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://10.1.40.61:3306/test_bid_system?useUnicode=true&characterEncoding=utf8"; String userName = "root"; String password = "root"; Connection conn = null; try { Class.forName(driverClassName); conn = DriverManager.getConnection(url, userName, password); } catch (Exception e) { e.printStackTrace(); } System.out.println("获取数据库连接成功!"); return conn; } }

    五、注意事项

    1、DBUtils是JDBC的简单封装,可以和JDBC混合使用。 2、DBUtils对结果集自动封装为JavaBean是有着苛刻要求的:必须满足JavaBean的规范,其次Bean的getter与setter方法的名字与结果集的列名一一对应,而不要求JavaBean的私有成员与表结果集列名一一对应。 3、DBUtils可以将结果集封装为各种类型,主要有:Bean/List,Map/List/Map,数组/List<数组>,列/List<列>,这些类型。

    Processed: 0.009, SQL: 9