DbUtils

DbUtils
 

 1. DbUtils:提供如关闭连接、装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的。
    commons-dbutils: 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。

 
主要方法如下:
(1) DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭Connection、Statement和ResultSet。
    public static void close(…) throws java.sql.SQLException 
    public static void closeQuietly(…): 这个方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLException。
    public static void commitAndCloseQuietly(Connection conn): 用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常。

(2)public static boolean loadDriver(java.lang.String driverClassName):这一方法 装载并注册JDBC驱动程序,如果成功就返回true。使用该方法,你不需要捕捉这个异常ClassNotFoundException。


 2.QueryRunner类 -- 两行代码搞定增删改查
   
  (1 )QueryRunner() -- 需要控制事务时,使用这组方法
    int update(Connection conn, String sql)
      Execute an SQL INSERT, UPDATE, or DELETE query without replacement parameters.
    int update(Connection conn, String sql, Object... params)
      Execute an SQL INSERT, UPDATE, or DELETE query.
    int update(Connection conn, String sql, Object param)
      Execute an SQL INSERT, UPDATE, or DELETE query with a single replacement parameter.
   
   <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh)
      Execute an SQL SELECT query without any replacement parameters.
   <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
      Execute an SQL SELECT query with replacement parameters.

  (2) QueryRunner(DataSource ds) -- 不需要控制事务用这组方法
    int update(String sql)
      Executes the given INSERT, UPDATE, or DELETE SQL statement without any replacement parameters.
    int update(String sql, Object... params)
      Executes the given INSERT, UPDATE, or DELETE SQL statement.
    int update(String sql, Object param)
      Executes the given INSERT, UPDATE, or DELETE SQL statement with a single replacement parameter.

    <T> T query(String sql, ResultSetHandler<T> rsh)
       Executes the given SELECT SQL without any replacement parameters.
    <T> T query(String sql, ResultSetHandler<T> rsh, Object... params)
       Executes the given SELECT SQL query and returns a result object.


 3.ResultSetHandler类 :实现类该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。
   
  ArrayHandler:把结果集中的第一行数据转成对象数组。
  ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
  !!!!BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
  !!!!BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
  MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
  MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
  ColumnListHandler:将结果集中某一列的数据存放到List中。
  KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List<Map>),再把这些map再存到一个map里,其key为指定的列。
  !!!!!ScalarHandler:获取结果集中第一行数据指定列的值,常用来进行单值查询

 4.写一个MyQueryRunner封装JDBC查询操作
写一个接口声明handle方法:
public interface MyResultSetHandler<T> {
	T handle(ResultSet rs) throws SQLException;
}
写MyQueryRunner类:
public class MyQueryRunner {
	private DataSource source = null;
	public MyQueryRunner() {
	}
	public MyQueryRunner(DataSource source) {
		this.source = source;
	}
        public <T> T query(String sql, MyResultSetHandler<T> rsh, Object... params)throws SQLException{
		Connection conn = source.getConnection();
		PreparedStatement ps = conn.prepareStatement(sql);
		//--获取参数元数据,获知参数个数
		ParameterMetaData metaData = ps.getParameterMetaData();
		int count = metaData.getParameterCount();
		//--循环设置参数
		for(int i=1;i<=count;i++){
			ps.setObject(i, params[i-1]);
		}
		
		//--执行查询获取结果集
		ResultSet rs = ps.executeQuery();
		
		//--回调处理结果集的逻辑
		T t = rsh.handle(rs);
		DbUtils.closeQuietly(conn, ps, rs);
		return t;
	}

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值