Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
一、包org.apache.commons.dbutils
接口摘要
ResultSetHandler 将ResultSet转换为别的对象的工具。 RowProcessor 将ResultSet行转换为别的对象的工具。
类摘要
BasicRowProcessor RowProcessor接口的基本实现类。 BeanProcessor BeanProcessor匹配列明到Bean属性名,并转换结果集列到Bean对象的属性中。 DbUtils 一个JDBC辅助工具集合。 ProxyFactory 产生JDBC接口的代理实现。 QueryLoader 属性文件加载器,主要用于加载属性文件中的 SQL 到内存中。 QueryRunner 使用可插拔的策略执行SQL查询并处理结果集。 ResultSetIterator 包装结果集为一个迭代器。
二. ResultSetHandler 接口
该接口 执行处理一个 java.sql.ResultSet ,将数据转变并处理为任何一种形式,这样有益于其应用而且使用起来更加容易方便。该接口提供ArrayHandler、ArrayListHandler、BeanHandler、BeanListHandler、MapHandler、MapListHandler、ScalarHandler等执行程序。ResultSetHandler的执行需要一个结果集(ResultSet)作为参数传入,然后才能处理这个结果集,再返回一个对象。因为返回类型是java.lang.Object,所以除了不能返回一个原始的Java类型之外,其它的返回类型并没有什么限制。如果你发现这七个执行程序中没有任何一个提供了你想要的服务,你可以自己写执行程序并使用它。
三. QueryRunner 类
该类能使执行SQL查询简单化,它与ResultSetHandler串联在一起有效地执行一些平常的任务,它能够大大减少所要写的代码码。它包含以下重要的方法: query(Connection conn,String sql,Object[] params,ResultSetHandler rsh): 该方法执行了一个选择查询,对象数组(Object[] params)中的值被用来作为查询语句sql的置换参数。该方法会内在地处理Statement和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):
该方法用来执行插入、更新或者删除操作,对象数组(Object[] params)中的值被用来作为更新语句sql的置换参数。
四、使用DBUtils
其实只是使用的话,只看两个类(DbUtils 和QueryRunner)和一个接口(ResultSethandler)就可以了。
1、DbUtils
DbUtils是一个为做一些诸如关闭连接、装载JDBC驱动程序之类的常规工作提供有用方法的类,它里面所有的方法都是静态的。
这个类里的重要方法有:
close(): DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL, 如果不是的话,它们就关闭连接、声明和结果集(ResultSet)。
CloseQuietly:
CloseQuietly这一方法不仅能在连接、声明或者结果集(ResultSet)为NULL情况下避免关闭, 还能隐藏一些在程序中抛出的SQLEeception。如果你不想捕捉这些异常的话,这对你是非常有用的。 在重载CloseQuietly方法时,特别有用的一个方法是closeQuietly(Connection conn,Statement stmt,ResultSet rs), 这是因为在大多数情况下,连接、声明和结果集(ResultSet)是你要用的三样东西,而且在最后的块你必须关闭它们。 使用这一方法,你最后的块就可以只需要调用这一方法即可。 DBUtils是JDBC的简单封装,可以和JDBC混合使用。 DBUtils对结果集自动封装为JavaBean是有着苛刻要求的:必须满足 JavaBean的规范,其次Bean的getter与setter方法的名字与结果集的列名一一对应,而不要求JavaBean的私有成员与表结果集列名一一对应。 DBUtils 可以将结果集封装为各种类型,主要有:Beam/List、 Map/List/Map、数组/List<数组>、列/List<列>。
