`
geshenyi
  • 浏览: 100998 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

commons.dbutils1.2介绍及使用

阅读更多
一、结构介绍

高层结构图:



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接口



分享到:
评论

相关推荐

    commons-dbutils.jar.rar

    `commons-dbutils.jar.rar` 是一个包含Apache Commons DBUtils库的不同版本的压缩文件,主要用于Java应用程序中的数据库操作。DBUtils是一个实用程序库,它简化了JDBC(Java Database Connectivity)的使用,提供了...

    commons-dbutils-1.2.rar

    这个"commons-dbutils-1.2.rar"文件包含了Apache Commons DBUtils的1.2版本,这是一个历史悠久且广泛使用的开源组件,适用于Java开发人员。 Apache Commons DBUtils的核心功能包括: 1. **查询处理**:DBUtils提供...

    java commons-dbutils-1.2.jar

    `commons-dbutils-1.2.jar`是较旧的一个版本,适用于Java SE 5及更高版本。虽然它可能不包含最新的功能和优化,但对于一些老项目或对新功能需求不高的情况,仍然是一种可靠的选择。如果需要更现代的功能和改进,可以...

    commons-dbutils-1.2.jar

    使用本组件对数据库进行数据管理。包括“增删改”。 最开始一样,对数据库进行连接,然后创建QueryRunner类型的对象,由于对数据的管理不返回一个结果集,所以只返回一个int类型的变量。 一样使用数组对sql语句中的...

    commons-dbutils-1.7.jar中文-英文对照文档.zip

    中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-...

    DBUtils使用和jar包.rar

    压缩包中存在DbUtils使用说明文档、jar包以及一个使用样例。commons-dbutils 是 Apache 组织提供的一个开源 JDBC 工具类库,对传统操作数据库的类进行二次封装,可以把结果集转化成List。

    jar:mysql5.0.8+dbcp1.2.2+dbutils1.2

    jar:mysql5.0.8+dbcp1.2.2+dbutils1.2,亲测可用。如果嫌弃包低,可用直接访问commons.apache官网http://commons.apache.org/选择下载即可。

    C3P0和DButils

    C3P0-0.9.1.2.jar是这个库的一个版本,它提供了数据库连接的池化,以提高性能和效率。连接池允许应用程序重复使用已存在的数据库连接,而不是每次需要时都创建新的连接,这样可以显著减少系统开销并防止因过多连接而...

    apache commons jar(commons所有的jar包,从官网下载提供.zip

    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

    c3p0 连接池 jar 文件合集(mysql)

    这个合集中的jar文件可能包括`c3p0.jar`,它是C3P0的主要实现,还有`mchange-commons-java.jar`,这是C3P0依赖的一个库。另外,由于描述中提到了duutils的jar文件,这可能是一个辅助工具或库,具体功能需根据duutils...

    Apache Commons 所有包最新版本 含SRC (6/7)

    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-...

    apache commons jar(commons所有的jar包,从官网下载提供给大家)

    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-...

    apache-commons源文件1,包括src,doc,jar,最新的

    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-...

    Apache Commons 所有包最新版本 含SRC (7/7)

    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-...

    Apache Common CLI 1.2 源码

    源码包"commons-cli-1.2-src"包含了Apache Common CLI 1.2的所有源代码,开发者可以通过查看源码深入理解其内部实现机制,这对于学习和定制该库的功能非常有帮助。Apache Common CLI 使用了Apache License,这是一种...

    Apache Commons 所有包最新版本 含SRC (4/7)

    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-...

    Apache Commons 所有包最新版本 含SRC (2/7)

    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-...

    Apache Commons 所有包最新版本 含SRC (5/7)

    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-...

    Apache Commons 所有包最新版本 含SRC (1/7)

    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-...

Global site tag (gtag.js) - Google Analytics