DBUtils工具类库的使用

关于Commons-DBUtils

Commons-DBUtils是Apache组织提供的一个开源的JDBC工具类库,它对JDBC进行了简单的封装,学习起来很简单, 而且大大的简化了工作量,关于数据库的操作一般一两句就可以解决问题了,并且不会影响程序的性能。

DBUtils的核心API及工具类:

1、org.apache.commons.dbutils.QueryRunner

2、org.apache.commons.dbutils.ResultSetHandler

3、org.apache.commons.dbutils.DbUtils

QueryRunner类使用

因为JDBC手写比较麻烦,而且有非常多的重复代码。比如获得连接,预编译SQL,释放资源等..那么可以将这些代码抽取出来放到工具类中。将类似的代码进行抽取,大大简化JDBC的编程。其主要功能用来对数据库执行增删改查(insert、delete、updateselect),降低了操作数据库的难度。

query():用于执行数据库表信息的查询操作;

update():用于执行数据库表的内容的增加、修改和删除的操作;

QueryRunner对象:核心运行类
1、在一般情况下如果执行CRUD的操作:
构造方法:QueryRunner(DataSource ds);
成员方法:
public int update(String sql,Object… args);
public T query(String sql,ResultSetHandler rsh,Object… args);
2、如果有事务管理的话使用另一套完成CRUD的操作
构造方法:QueryRunner();
成员方法:
public int update(Connection conn,String sql,Object… args);

public T query(Connection conn,String sql,ResultSetHandler rsh,Object… args);


提示:不需要进行事务管理时,可以使用有构造QueryRunner(DataSource ds),因为不进行事务管理,不需要保证拿到的Connection是同一个,只需要传递SQL语句和ResultSetHandler参数就可以此时是自动事务;相反,若要进行事务管理,就必须保证进行的事务拿到的是同一个Connection,否则事务管理会无效,因此必须指定Connection。 


ResultSetHandler接口的实现类

DBUtils的使用之ResultSetHandler的实现类一

1、ArrayHandler:把结果集中的第一行数据转成对象数组

public void demo() throws SQLException{
			QueryRunner queryrunner = new QueryRunner(JDBCUtils.getDataSource() ;
			String sql = "select * from account where id = ?" ;
			Object[] obj = queryrunner.query(sql,ArrayHandler(),1) ;
			system.out.println(Arrays.toString(obj)) ;
		}

2、ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中

public void demo() throws SQLException{
			QueryRunner queryrunner = new QueryRunner(JDBCUtils.getDataSource() ;
			String sql = "select * from account" ;
			List<Object[]> list = queryrunner.query(sql,ArrayListHandler()) ;
			For(Object obj:list){
			system.out.println(Arrays.toString(obj)) ;
			}
		}

DBUtils的使用ResultSetHandler的实现类二(最常用)

1、BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中

public void demo() throws SQLException{
			QueryRunner queryrunner = new QueryRunner(JDBCUtils.getDataSource()) ;
			String sql = "select * from account where id = ?" ;
			Account account = queryrunner.query(sql,new BeanHandler<Account>(Account.class),1) ;
			system.out.println(account) ;
		}

2、BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里

public void demo() throws SQLException{
			QueryRunner queryrunner = new QueryRunner(JDBCUtils.getDataSource() ;
			String sql = "select * from account" ;
			List<Account> list = queryrunner.query(sql,BeanListHandler<Account>(Account.class)) ;
			For(Account account:list){
			system.out.println(account) ;
			}
		}

DBUtils的使用之ResultSetHandler的实现类三

1、MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值

public void demo() throws SQLException{
			QueryRunner queryrunner = new QueryRunner(JDBCUtils.getDataSource() ;
			String sql = "select * from account where id = ?" ;
			Map<String,Object> map = queryrunner.query(sql,new MapHandler(),1) ;
			system.out.println(map) ;
		}

2、MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List

public void demo() throws SQLException{
			QueryRunner queryrunner = new QueryRunner(JDBCUtils.getDataSource() ;
			String sql = "select * from account" ;
			List<Map<String,Object>>list = queryrunner.query(sql,MapListHandler()) ;
			For(Map<String,Object> map2:list){
			system.out.println(map2) ;
			}
		}

DBUtils的使用之ResultSetHandler的实现类四(不常用)

1、ColumnListHandler:将结果集中某一列的数据存放到List中

public void demo() throws SQLException{
			QueryRunner queryrunner = new QueryRunner(JDBCUtils.getDataSource() ;
			String sql = "select * from account" ;
			List<Object> list = queryrunner.query(sql,new ColumnListHandler("name")) ;
			for(Object obj:list){
			system.out.println(obj) ;
			}
		}

2、KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key

public void deme(){
			QueryRunner queryrunner = new QueryRunner(JDBCUtils.getDataSource()) ;
			String sql = "select * from account" ;
			Map<Object,Map<String,Object>> map = QueryRunner.query(sql,new keyedHandler());
			for(Object key : map.keySet()){
			system.out.println(key+""+map.get(key));
			}
		}

3、ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object

public void demo(){
			QueryRunner queryrunner = new QueryRunner(JDBCUtils.getDataSource()) ;
			String sql = "select count(*) from account" ;
			Object obj = queryrunner.query(sql,new ScalarHandler()) ;
			system.out.println(obj) ;
		}

最后附上改写的工具类

public class DBUtils {

	private static ComboPooledDataSource dataSource = new ComboPooledDataSource();

	// 获取连接池中的连接
	public static Connection getConnection() throws SQLException {

		return dataSource.getConnection();

	}

	// 获取数据源
	public static DataSource getDataSource() {
		return dataSource;
	}

	// 释放释放资源
	public static void release(Statement stat, Connection con) {

		if (stat != null) {
			try {
				stat.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			stat = null;
		}
		if (con != null) {
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		con = null;
	}

	// 释放释放资源
	public static void release(ResultSet rs, Statement stat, Connection con) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			rs = null;
		}
		release(stat, con);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值