DBUtils使用:什么是DBUtils

    科技2026-03-27  13

    DBUtils使用:什么是DBUtils

    DBUtils概述如何使用DBUtilsDbUtils:一个工具类,定义了关闭资源与事务处理的方法QueryRunner:提供API.ResultSetHandler接口:定义怎样封装结果集 案例:QueryRunner类实现数据库操作QueryRunner核心类QueryRunner类实现

    DBUtils概述

    commons-dbutils是Apache 提供的一个开源JDBC(Java Database Connectivity)工具类库,它是对JDBC的简单封装,简化了JDBC的开发,解决了JDBC冗余代码多的问题,同时学习成本不高,程序的性能不受影响。 简单来说,DBUtils就是JDBC的简化开发工具包。 这个工具包需要项目导入commons-dbutils-1.6.jar才能够正常使用。

    如何使用DBUtils

    其实掌握两个类(DbUtils 和QueryRunner)和一个接口(ResultSethandler)就已经可以使用了。

    DbUtils:一个工具类,定义了关闭资源与事务处理的方法

    Dbutils是一个为常规工作提供有用方法的类(比如关闭连接、装载JDBC驱动程序)。 这个类里的重要方法有: close() CloseQuietly CommitAndCloseQuietly(Connection conn)

    QueryRunner:提供API.

    这个类使执行SQL查询简单化了,它与ResultSetHandler串联在一起有效地履行着一些平常的任务,QueryRunner类提供了两个构造器:其中一个是一个空构造器,另一个则拿一个 javax.sql.DataSource 来作为参数。

    update(Connection conn, String sql, Object… params) ,用来完成表数据的增加、删除、更新操作query(Connection conn, String sql, ResultSetHandler rsh,Object… params) ,用来完成表数据的查询操作

    ResultSetHandler接口:定义怎样封装结果集

    这一接口执行处理一个jaca.sql.ResultSet,将数据转变并处理为任何一种形式,这样有益于其应用而且使用起来更容易。

    ResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。因此任何ResultSetHandler 的执行需要一个结果集(ResultSet)作为参数传入,然后才能处理这个结果集,再返回一个对象。

    案例:QueryRunner类实现数据库操作

    QueryRunner核心类

    这一类中的重要方法包括:

    query(Connection conn, String sql, Object[] params, ResultSetHandler rsh):

    这一方法执行一个选择查询,在这个查询中,对象阵列的值被用来作为查询的置换参数。 这一方法内在地处理PreparedStatement 和ResultSet 的创建和关闭。 ResultSetHandler对把从 ResultSet得来的数据转变成一个更容易的或是应用程序特定的格式来使用。

    query(String sql, Object[] params, ResultSetHandler rsh):

    这几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法, 并且它是从提供给构造器的数据源(DataSource) 或使用的setDAtaSource 方法中重新获得的。

    query(Connection conn, String sql, ResultSetHandler rsh):

    这执行一个不要参数的选择查询。

    update(Connection conn, String sql, Object[] params):

    这一方法被用来执行一个插入、更新或删除操作。对象阵列为声明保存着置换参数。

    QueryRunner类实现

    import java.sql.Connection; import java.sql.SQLException; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayHandler; import org.apache.commons.dbutils.handlers.ArrayListHandler; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ColumnListHandler; import org.apache.commons.dbutils.handlers.MapHandler; import org.apache.commons.dbutils.handlers.MapListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import cn.hpu.utils.JDBCUtilsConfig; import cn.hpu.utils.JDBCUtilsDataSourceConfig;

    还是上面说的,利用 Apache commons组件 dbutils 简化 jdbc 开发 ; DBUtils封装了对JDBC的操作,简化了JDBC操作,Dbutils三个核心功能介绍:

    QueryRunner中提供对SQL语句操作的API.ResultSetHandler接口,用于定义select操作后,怎样封装结果集.DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法 public class JDBCUtilsLearn { private static Connection con=JDBCUtilsConfig.getConnection(); private static QueryRunner que=new QueryRunner(); public static void main(String[] args) throws SQLException { // insert(); // update(); // delete();

    QueryRunner核心类 update(Connection conn, String sql, Object… params) ,用来完成表数据的增加、删除、更新操作。 query(Connection conn, String sql, ResultSetHandler rsh, Object… params) ,用来完成表数据的查询操作 利用QueryRunner实现添加、更新、删除操作

    //添加操作 public static void insert() throws SQLException { String sql="insert into zhangwu (name,money) values (?,?)"; Object params[]= {"学习用品",236}; que.update(con, sql, params); con.close(); }; //更新操作 public static void update() { String sql=" update zhangwu set money=money+100 where name=?"; Object params[]= {"美容服饰"}; try { que.update(con, sql, params); con.close(); } catch (SQLException e) { e.printStackTrace(); } }; //删除操作 public static void delete() { String sql="delete from zhangwu where name=?"; Object params[]= {"未知"}; try { que.update(con, sql, params); con.close(); } catch (SQLException e) { e.printStackTrace(); } };

    利用QueryRunner实现查询操作 query(Connection conn, String sql, ResultSetHandler rsh, Object… params) ResultSetHandler(它是一个接口)结果集处理类; 其八种实现类如下: 1:ArrayHandler:将结果集中的第一条记录封装到一个Object[]数组中数组中的每一个元素就是这条记录中的每一个字段的值 2.ArrayListHandler 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。

    //@ArrayHander 查询 public static void selectArrayHandler() { String sql="select * from zhangwu"; try { Object obj[]=que.query(con, sql, new ArrayHandler()); for(int i=0;i<obj.length;i++) { System.out.println(obj[i]); }; con.close(); } catch (SQLException e) { e.printStackTrace(); } } //@ArrayListHander查询 public static void selectArrayListHander() { String sql="select * from zhangwu"; try { List<Object[]> list=que.query(con, sql, new ArrayListHandler()); for(Object[]obj:list) { for(int i=0;i<obj.length;i++) { System.out.print(obj[i]); }; System.out.println(); }; con.close(); } catch (SQLException e) { e.printStackTrace(); } }; public static void selectBeanHandler() { try { String sql="select * from zhangwu where id=? and name=? and money=?"; Object [] parpams= {18,"学习用品",236}; zhangWu bean=que.query(con, sql, new BeanHandler<zhangWu>(zhangWu.class),parpams); System.out.println(bean); con.close(); } catch (SQLException e) { e.printStackTrace(); } }; public static void selectBeanListHandler() { String sql="select * from zhangwu"; try { List<zhangWu> list= que.query(con,sql, new BeanListHandler<zhangWu>(zhangWu.class)); for(zhangWu i:list) { System.out.println(i); }; con.close(); } catch (SQLException e) { e.printStackTrace(); } }; public static void selectColumnListHandler() { String sql="select * from zhangwu where id>?"; Object []params= {9}; try { List<Object>list=que.query(con, sql, new ColumnListHandler<Object>(3), params); for(Object obj:list) { System.out.println(obj); }; con.close(); } catch (SQLException e) { e.printStackTrace(); } } public static void selectScalarHandler() { String sql ="select max(money) from zhangwu"; try { double a=que.query(con, sql, new ScalarHandler<Double>()); System.out.println(a); con.close(); } catch (SQLException e) { e.printStackTrace(); } }; public static void selectMapHandler() { String sql="select * from zhangwu where id=?"; Object [] params= {12}; try { Map<String, Object> map=que.query(con, sql, new MapHandler(), params); Set<Entry<String, Object>> set=map.entrySet(); Iterator<Entry<String, Object>> it=set.iterator(); for(;it.hasNext();) { Entry<String, Object> entry=it.next(); System.out.println(entry.getKey()+"\t"+entry.getValue()); }; } catch (SQLException e) { e.printStackTrace(); } }; public static void selectMapListHandler() { String sql="select * from zhangwu"; try { List<Map<String, Object>>list=que.query(con, sql, new MapListHandler()); for(Map<String, Object> map:list) { Set<Entry<String, Object>> set=map.entrySet(); Iterator<Entry<String, Object>> it=set.iterator(); while(it.hasNext()) { Entry<String, Object> entry=it.next(); System.out.println(entry.getKey()+"\t"+entry.getValue()); }; }; con.close(); } catch (SQLException e) { e.printStackTrace(); } }; }

    参考文章

    Processed: 0.020, SQL: 9