DBUtils如何使用

    科技2025-12-18  10

    一、Dbutils是什么?

    Dbutils:是一个对JDBC进行简单封装的开源工具类库,主要是封装了JDBC的代码,简化开发人员对dao层的操作。 在JDBC编程中,资源的关闭是显式的,极易导致编程出现错误,DBUtils把这些工作抽象出来,使得程序员编程时仅需要关心正真的问题,即对数据库的增删改查。

    二、整个dbutils总共才3个包

    1、包org.apache.commons.dbutils

    接口摘要 ResultSetHandler 将ResultSet转换为别的对象的工具。 RowProcessor 将ResultSet行转换为别的对象的工具。

    类摘要 BasicRowProcessor RowProcessor接口的基本实现类。 BeanProcessor BeanProcessor匹配列明到Bean属性名,并转换结果集列到Bean对象的属性中。 DbUtils 一个JDBC辅助工具集合。 ProxyFactory 产生JDBC接口的代理实现。 QueryLoader 属性文件加载器,主要用于加载属性文件中的 SQL 到内存中。 QueryRunner 使用可插拔的策略执行SQL查询并处理结果集。 ResultSetIterator 包装结果集为一个迭代器。

    2、包org.apache.commons.dbutils.handlers ResultSetHandler接口的实现类

    类摘要 AbstractListHandler 将ResultSet转为List的抽象类 ArrayHandler 将ResultSet转为一个Object[]的ResultSetHandler实现类 ArrayListHandler 将ResultSet转换为List<Object[]>的ResultSetHandler实现类 BeanHandler 将ResultSet行转换为一个JavaBean的ResultSetHandler实现类 BeanListHandler 将ResultSet转换为List的ResultSetHandler实现类 ColumnListHandler 将ResultSet的一个列转换为List的ResultSetHandler实现类 KeyedHandler 将ResultSet转换为Map的ResultSetHandler实现类 MapHandler 将ResultSet的首行转换为一个Map的ResultSetHandler实现类 MapListHandler 将ResultSet转换为List的ResultSetHandler实现类 ScalarHandler 将ResultSet的一个列到一个对象。

    3、包org.apache.commons.dbutils.wrappers 添加java.sql类中功能包装类。

    类摘要 SqlNullCheckedResultSet 在每个getXXX方法上检查SQL NULL值的ResultSet包装类。 StringTrimmedResultSet 取出结果集中字符串左右空格的ResultSet包装类。

    下载好后: 三、基本功能 DbUtils实现增删改查   3.1 增删改:调用Update方法

    public static void insert() { try { //新建QueryRunner对象 QueryRunner qr = new QueryRunner(); //执行的Sql语句 String sql = "insert into Student (sname,age)values(?,?)"; //参数,可以使用Object数组,也可以直接写 Object[] params = { "王六", 22 }; //执行Update,返回受影响的记录        Connection conn = getConnection(); int result = qr.update(conn,sql, params); System.out.println(result);        conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } }

    3.2查询   3.2.1 使用ArrayHander和ArrayListHandler操作结果集,结果集为空则返回[ ]空集合

    public static void QueryByArrayHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from Student ";        Connection conn = getConnection(); Object[] result = qr.query(conn, sql, new ArrayHandler()); System.out.println(result); System.out.println(Arrays.toString(result));        conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } } public static void QueryByArrayListHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from Student";        Connection conn = getConnection(); List<Object[]> result = qr.query(conn, sql, new ArrayListHandler()); System.out.println(result); for (Object[] objs : result) { System.out.println(Arrays.toString(objs)); }        conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } }

    3.2.2 BeanHandler和BeanListHandler

    public static void QueryByBeanHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from student where id>10";        Connection conn = getConnection(); Student s = qr.query(conn, sql, new BeanHandler<Student>(Student.class)); System.out.println(s);        conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } } public static void QueryByBeanListHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from student";        Connection conn = getConnection(); List<Student> stus = qr.query(conn, sql, new BeanListHandler<Student>(Student.class)); for (Student s : stus) { System.out.println(s.ToString()); }        conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } }

    3.3.3 ColumnHandler和ScalarHandler

    public static void QueryByColumnListHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from student ";        Connection conn = getConnection(); List<String> names = qr.query(conn, sql, new ColumnListHandler<String>("sname")); for (String name : names) { System.out.println(name); }        conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } } public static void QueryByScalarHandler(){ try { QueryRunner qr = new QueryRunner(); String sql = "select count(*) from student ";        Connection conn = getConnection(); //new ScalarHandler<Long>() 内部应该是用的Long,所以泛型用Long long num = qr.query(conn, sql, new ScalarHandler<Long>()); System.out.println(num);        conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } }

    3.3.4 MapHandler和MapListHandler :返回的Map是有序的

    public static void QueryByMapHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from student ";        Connection conn = getConnection(); Map<String, Object> data = qr.query(conn, sql, new MapHandler()); // Map的类型:org.apache.commons.dbutils.BasicRowProcessor$CaseInsensitiveHashMap // 继承自LinkedHashMap<String, Object>,所以它是有序的 System.out.println(data.getClass()); for (String key : data.keySet()) { System.out.println(data.get(key)); }        conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } } public static void QueryByMapListHandler() { try { QueryRunner qr = new QueryRunner(); String sql = "select * from student ";        Connection conn = getConnection(); List<Map<String,Object>> data = qr.query(conn, sql, new MapListHandler()); for (Map<String,Object> map : data) { //map的类型:org.apache.commons.dbutils.BasicRowProcessor$CaseInsensitiveHashMap //继承自LinkedHashMap<String, Object>,所以它是有序的 System.out.println(map.getClass()); for(String key:map.keySet()){ System.out.println(map.get(key)); } }        conn.close(); } catch (SQLException ex) { System.out.println(ex); throw new RuntimeException(""); } }

    四、整体功能整合

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanListHandler; import bean.StudentBean;`` public class DBTest { public static void main(String[] args) { insertData(); updateData(); selectData(); deleteData(); insertDataWithParams(1002,"kj",23); } 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); }
    Processed: 0.061, SQL: 11