- 浏览: 100998 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
kingcs:
IndexSearcher 没有关闭。 searcher.cl ...
lucene第一步---6.分页 -
xyheritrix:
看了后我没一点点刺激,你的3个例子对我根本说明不了问题,在我看 ...
从优秀迈向卓越 -- 我的设计模式学习感悟 -
zl0828:
这个小知识值得分享,我支持lz分享
jquery ui 1.7版中的datepicker大小問題
一、结构介绍
高层结构图:
wrappers包:
handlers包(部分):
二、功能介绍
commons.dbutils是一个对JDBC操作进行封装的类集,其有如下几个优点:
(1)没有可能的资源泄漏,避免了繁锁的JDBC代码
(2)代码更整洁
(3)从ResultSet自动生成JavaBeans属性
(4)无其他依赖包
三、基本使用
基本用到的类有:QueryRunner、ResultSetHandler及其子类等
QueryRunner -- 执行查询的类,可以执行SELECT、INSERT、UPDATE、DELETE等语句,QueryRunner用ResultSetHandler的子类来处理ResultSet并返回结果;而包提供的ResultSetHandler子类使用RowProcessor的子类来处理ResultSet中的每一行;RowProcessor的默认实现为BasicRowProcessor;BeanProcessor不是RowProcessor,可以看作一个工具类
ResultHandler及其子类 -- 实现了Object handle(ResultSet rs) throws SQLException方法
AbstractListHandler -- 返回多行List的抽象类
ArrayHandler -- 返回一行的Object[]
ArrayListHandler -- 返回List,每行是Object[]
BeanHandler -- 返回第一个Bean对象
BeanListHandler -- 返回List,每行是Bean
ColumnListHandler -- 返回一列的List
KeyedHandler -- 返回Map,具体见代码
MapHandler -- 返回单个Map
MapListHandler -- 返回List,每行是Map
ScalarHandler -- 返回列的头一个值
关于wrappers包:
在新建 QueryRunner时,覆盖父类的方法wrap
四、扩展
1.RowProcessor接口
2.ResultSetHandler接口
高层结构图:
wrappers包:
handlers包(部分):
二、功能介绍
commons.dbutils是一个对JDBC操作进行封装的类集,其有如下几个优点:
(1)没有可能的资源泄漏,避免了繁锁的JDBC代码
(2)代码更整洁
(3)从ResultSet自动生成JavaBeans属性
(4)无其他依赖包
三、基本使用
基本用到的类有:QueryRunner、ResultSetHandler及其子类等
QueryRunner -- 执行查询的类,可以执行SELECT、INSERT、UPDATE、DELETE等语句,QueryRunner用ResultSetHandler的子类来处理ResultSet并返回结果;而包提供的ResultSetHandler子类使用RowProcessor的子类来处理ResultSet中的每一行;RowProcessor的默认实现为BasicRowProcessor;BeanProcessor不是RowProcessor,可以看作一个工具类
ResultHandler及其子类 -- 实现了Object handle(ResultSet rs) throws SQLException方法
AbstractListHandler -- 返回多行List的抽象类
ArrayHandler -- 返回一行的Object[]
ArrayListHandler -- 返回List,每行是Object[]
BeanHandler -- 返回第一个Bean对象
BeanListHandler -- 返回List,每行是Bean
ColumnListHandler -- 返回一列的List
KeyedHandler -- 返回Map,具体见代码
MapHandler -- 返回单个Map
MapListHandler -- 返回List,每行是Map
ScalarHandler -- 返回列的头一个值
//建表语句 DROP TABLE IF EXISTS `test`.`user`; CREATE TABLE `test`.`user` ( `name` varchar(10) DEFAULT NULL, `password` varchar(10) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; 表中数据 'user1', 'pwd1' 'user2', 'pwd2' //User类 public class User { private String name; private String pwd; public User(){ } public void setName(String val) { this.name = val; } public void setPassword(String val) { this.pwd = val; } public String getName() { return name; } public String getPassword() { return pwd; } }
package dbutiltest; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.List; import java.util.Map; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.ResultSetHandler; 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.KeyedHandler; import org.apache.commons.dbutils.handlers.MapListHandler; public class TestDbUtils { static { try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } } public Connection getConnection() { Connection conn = null; try { conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test", "root", "pwd"); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static void main(String[] args) { TestDbUtils u = new TestDbUtils(); u.testArrayHandler(); u.testArrayListHandler(); u.testBeanListHandler(); u.testMapListHandler(); u.testColumnListHandler(); u.testNonQuery(); } public void testArrayHandler() { System.out.println("----testArrayHandler----"); String sql = "select * from user"; ResultSetHandler handler = new ArrayHandler(); QueryRunner query = new QueryRunner(); Connection conn = null; try { conn = getConnection(); Object[] arr = (Object[])query.query(conn, sql, handler); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i].toString()); } } catch (SQLException e) { e.printStackTrace(); } finally { try { DbUtils.close(conn); } catch (SQLException e) { // ignore } } } public void testArrayListHandler() { System.out.println("----testArrayListHandler----"); String sql = "select * from user"; ResultSetHandler handler = new ArrayListHandler(); QueryRunner query = new QueryRunner(); Connection conn = null; try { conn = getConnection(); List list = (List)query.query(conn, sql, handler); for (int i = 0; i < list.size(); i++) { Object[] arr = (Object[])list.get(i); for (int j = 0; j < arr.length; j++) { System.out.print(arr[j] + " "); } System.out.println(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { DbUtils.close(conn); } catch (SQLException e) { // ignore } } } public void testBeanListHandler() { System.out.println("----testBeanListHandler----"); String sql = "select * from user where name=?"; Object[] params = new Object[]{"user1"}; ResultSetHandler handler = new BeanListHandler(User.class); QueryRunner query = new QueryRunner(); Connection conn = null; try { conn = getConnection(); List list = (List)query.query(conn, sql, params, handler); for (int i = 0; i < list.size(); i++) { User user = (User)list.get(i); System.out.println(user.getName() + " " + user.getPassword()); } } catch (SQLException e) { e.printStackTrace(); } finally { try { DbUtils.close(conn); } catch (SQLException e) { // ignore } } } public void testMapListHandler() { System.out.println("----testMapListHandler----"); String sql = "select * from user where name=?"; Object[] params = new Object[]{"user1"}; ResultSetHandler handler = new MapListHandler(); QueryRunner query = new QueryRunner(); Connection conn = null; try { conn = getConnection(); List list = (List)query.query(conn, sql, params, handler); for (int i = 0; i < list.size(); i++) { Map user = (Map)list.get(i); System.out.println(user.get("name") + " " + user.get("password")); } } catch (SQLException e) { e.printStackTrace(); } finally { try { DbUtils.close(conn); } catch (SQLException e) { // ignore } } } public void testColumnListHandler() { System.out.println("----testColumnListHandler----"); String sql = "select * from user"; ResultSetHandler handler = new ColumnListHandler("name"); QueryRunner query = new QueryRunner(); Connection conn = null; try { conn = getConnection(); List list = (List)query.query(conn, sql, handler); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } catch (SQLException e) { e.printStackTrace(); } finally { try { DbUtils.close(conn); } catch (SQLException e) { // ignore } } } public void testKeyedHandler() { System.out.println("----testKeyedHandler----"); String sql = "select * from user"; ResultSetHandler handler = new KeyedHandler("name"); QueryRunner query = new QueryRunner(); Connection conn = null; try { conn = getConnection(); Map map = (Map)query.query(conn, sql, handler); Map user = (Map)map.get("user2"); System.out.println(user.get("password")); } catch (SQLException e) { e.printStackTrace(); } finally { try { DbUtils.close(conn); } catch (SQLException e) { // ignore } } } public void testNonQuery() { System.out.println("----testNonQuery----"); String sql = "insert into `user` values('user_test','pwd_test')"; QueryRunner query = new QueryRunner(); Connection conn = null; try { conn = getConnection(); query.update(conn, sql); } catch (SQLException e) { e.printStackTrace(); } finally { try { DbUtils.close(conn); } catch (SQLException e) { // ignore } } } }
关于wrappers包:
在新建 QueryRunner时,覆盖父类的方法wrap
QueryRunner query = new QueryRunner() { protected ResultSet wrap(ResultSet rs) { return StringTrimmedResultSet.wrap(rs); } };
四、扩展
1.RowProcessor接口
2.ResultSetHandler接口
发表评论
-
DynaClass,DynaBean使用 .
2011-07-26 11:35 1060DynaClass/DynaBean 这似乎是BeanUti ... -
IText生成PDF
2011-04-20 15:47 883iText是著名的开放源码的站点sourceforge一个项目 ... -
利用Javascript 得到客户端的浏览器版本、操作系统等信息
2011-03-29 12:46 989<!----------javascript获取客户端i ... -
JS的正则表达式
2011-02-23 13:31 618JS的正则表达式 //校验是否全由数字组成 funct ... -
通过el表达式和jstl格式化当前时间
2011-01-25 10:50 1624通过el表达式和jstl格式化当前时间 可以用jstl里面的f ... -
POI 打印设置
2011-01-17 13:03 1723# 关于POI的打印设置: # # 转自http:/ ... -
tomcat servlet与web.xml的配置说明
2011-01-07 09:42 3085tomcat servlet与web.xml的配置说明 先总 ... -
HashMap & List 排序
2011-01-06 16:52 900首先是HashMap: HashMap map = ... -
Java获取各种常用时间方法
2010-12-24 12:29 565package com.hefeng.test; i ... -
freemarker 入门学习手册
2010-11-02 00:39 785freemarker 官方文档 http://freemark ... -
如何用ResourceBundle来读取配置文件
2010-10-12 11:28 738对于java基础很好的人来说,这个应该是简单的不能再简单的了。 ... -
Beginning lucene
2010-10-11 14:18 719Beginning lucene 关键字: lu ... -
apache commons DbUtils
2010-10-11 13:27 812apache commons DbUtils 关键字: apa ... -
Apache Commons Configuration/FileUpload
2010-10-11 13:24 7832008-07-04 Apache Commons Confi ...
相关推荐
`commons-dbutils.jar.rar` 是一个包含Apache Commons DBUtils库的不同版本的压缩文件,主要用于Java应用程序中的数据库操作。DBUtils是一个实用程序库,它简化了JDBC(Java Database Connectivity)的使用,提供了...
这个"commons-dbutils-1.2.rar"文件包含了Apache Commons DBUtils的1.2版本,这是一个历史悠久且广泛使用的开源组件,适用于Java开发人员。 Apache Commons DBUtils的核心功能包括: 1. **查询处理**:DBUtils提供...
`commons-dbutils-1.2.jar`是较旧的一个版本,适用于Java SE 5及更高版本。虽然它可能不包含最新的功能和优化,但对于一些老项目或对新功能需求不高的情况,仍然是一种可靠的选择。如果需要更现代的功能和改进,可以...
使用本组件对数据库进行数据管理。包括“增删改”。 最开始一样,对数据库进行连接,然后创建QueryRunner类型的对象,由于对数据的管理不返回一个结果集,所以只返回一个int类型的变量。 一样使用数组对sql语句中的...
中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-...
压缩包中存在DbUtils使用说明文档、jar包以及一个使用样例。commons-dbutils 是 Apache 组织提供的一个开源 JDBC 工具类库,对传统操作数据库的类进行二次封装,可以把结果集转化成List。
jar:mysql5.0.8+dbcp1.2.2+dbutils1.2,亲测可用。如果嫌弃包低,可用直接访问commons.apache官网http://commons.apache.org/选择下载即可。
C3P0-0.9.1.2.jar是这个库的一个版本,它提供了数据库连接的池化,以提高性能和效率。连接池允许应用程序重复使用已存在的数据库连接,而不是每次需要时都创建新的连接,这样可以显著减少系统开销并防止因过多连接而...
apache commons jar(commons所有的jar包... apache-sanselan-incubating-0.97-bin bcel-5.2 commons-beanutils-1.9.2-bin commons-chain-1.2-bin commons-cli-1.3.1-bin commons-codec-1.10-bin commons-collections4-4
这个合集中的jar文件可能包括`c3p0.jar`,它是C3P0的主要实现,还有`mchange-commons-java.jar`,这是C3P0依赖的一个库。另外,由于描述中提到了duutils的jar文件,这可能是一个辅助工具或库,具体功能需根据duutils...
jci-1.0-src.zip commons-jelly-1.0-src.zip commons-jelly-1.0.zip commons-jexl-1.1-src.zip commons-jexl-1.1.zip commons-jxpath-1.2-src.zip commons-jxpath-1.2.zip commons-lang-2.4-...
commons-dbutils-1.6-bin commons-digester3-3.2-bin commons-el-1.0 commons-email-1.4-bin commons-fileupload-1.0 commons-fileupload-1.1.1 commons-fileupload-1.1 commons-fileupload-1.2.1-bin commons-...
commons-dbutils-1.5-bin.zip commons-digester3-3.2-bin.zip commons-discovery-0.5-bin.zip commons-el-1.0.zip commons-email-1.2-bin.zip commons-exec-1.1-bin.zip commons-fileupload-1.2.2-bin.zip commons-...
jci-1.0-src.zip commons-jelly-1.0-src.zip commons-jelly-1.0.zip commons-jexl-1.1-src.zip commons-jexl-1.1.zip commons-jxpath-1.2-src.zip commons-jxpath-1.2.zip commons-lang-2.4-...
源码包"commons-cli-1.2-src"包含了Apache Common CLI 1.2的所有源代码,开发者可以通过查看源码深入理解其内部实现机制,这对于学习和定制该库的功能非常有帮助。Apache Common CLI 使用了Apache License,这是一种...
jci-1.0-src.zip commons-jelly-1.0-src.zip commons-jelly-1.0.zip commons-jexl-1.1-src.zip commons-jexl-1.1.zip commons-jxpath-1.2-src.zip commons-jxpath-1.2.zip commons-lang-2.4-...
jci-1.0-src.zip commons-jelly-1.0-src.zip commons-jelly-1.0.zip commons-jexl-1.1-src.zip commons-jexl-1.1.zip commons-jxpath-1.2-src.zip commons-jxpath-1.2.zip commons-lang-2.4-...
jci-1.0-src.zip commons-jelly-1.0-src.zip commons-jelly-1.0.zip commons-jexl-1.1-src.zip commons-jexl-1.1.zip commons-jxpath-1.2-src.zip commons-jxpath-1.2.zip commons-lang-2.4-...
jci-1.0-src.zip commons-jelly-1.0-src.zip commons-jelly-1.0.zip commons-jexl-1.1-src.zip commons-jexl-1.1.zip commons-jxpath-1.2-src.zip commons-jxpath-1.2.zip commons-lang-2.4-...