JDBC编程----DBUtils的使用

DBUtils

0、简单介绍

  给QueryRunner一个连接池(DataSourse),它自己会自动的从连接池中获取一个连接

1、DBUtils的使用方式如下:
package pack05_dbutils;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;

/*
 * 工具类:DBUtils
 * QueryRunner
 *  构造方法:
 *   public QueryRunner();
 *   public QueryRunner(DataSource);  //有参构造需要传入的是连接池
 *  成员方法 :
 *  update(String sql, Object... params) :除了select之外
 *  query(String sql, ResultSetHandler<T> rsh, Object... params) :select
 */
public class Demo01DBUtils {
	
	//向表中添加一条数据
	@Test
	public void insert() throws SQLException{
		//1:创建QueryRunner对象,使用有参构造
		//你给了QueryRunner一个连接池,它自己会自动的从连接池中获取一个连接
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		//2:执行sql
		int rows = qr.update("insert into category values(NULL,?)", "水果");
		System.out.println(rows);
		
		//--------------------------------------
//		new QueryRunner(C3P0Utils.getDataSource()).update("insert into category values(NULL,?)", "水果");
		
	}
	
	@Test
	public void update() throws SQLException{
		QueryRunner qr = new  QueryRunner(C3P0Utils.getDataSource());
		int rows = qr.update("update category set cname=? where cid = ?", "果果",4);
		System.out.println(rows);
	}
}
此时C3P0Utils需要有一个提供连接池的方法
package pack05_dbutils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Utils {
	private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
	
	public static Connection getConnection() throws SQLException{
		return dataSource.getConnection();
	}
	
	public static DataSource getDataSource(){
		return dataSource;
	}
	//4:释放资源
	public static void close(ResultSet rs, Statement stat, Connection conn) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		if (stat != null) {
			try {
				stat.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close(); //这里的close不是把连接断开,而是把连接重新放回连接池
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

2、DBUTils中的query方法

package pack05_dbutils;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.QueryRunner;
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.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;

/*
 * DBUtil提供的工具类:
 *  query(String sql, ResultSetHandler<T> rsh, Object... params) :select
 *  
 *  操作一行
 *  	ArrayHandler      : 数组   Obejct[]
 *      BeanHandler       : 对象   Object   !!!!!!!!!!!!!!!
 *      MapHandler        : Map集合   Map<String,Object>
 *  操作所有行
 *      ArrayListHandler: List集合   List<Obejct[]>
 *      BeanListHandler : List集合   List<Object> !!!!!!!!!!!!!!!!!!
 *      MapListHandler  : List集合   List<Map<String,Object>>
 *  操作一列
 *     ColumnListHandler: List集合 List<Object>
 *  操作单值
 *    ScalarHandler  :    Object对象  Object
 */
public class Demo02DBUtilsQuery {
	
	//8:ScalarHandler
	//可以获取单值:sum(),count()
	@Test
	public void func8() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		Object object = qr.query("select sum(price) 's' ,count(*) 'c'from product", new ScalarHandler("c"));
		
		System.out.println(object);
	}
	
	//7:MapListHander
	//将负责将结果集中每一行的数据放入Map集合
	//Map多了,存入集合: List<Map<String,Object>>
	@Test
	public void func7() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		List<Map<String, Object>> list = qr.query("select * from product", new MapListHandler());
		for (Map<String, Object> map : list) {
			System.out.println(map);
		}
	}
	
	
	//6:MapHandler
	//将负责将结果集中第一行的数据放入Map集合
	//Map键:列的名字
	//Map值:列的值
	@Test
	public void func6() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		Map<String, Object> map = qr.query("select * from product", new MapHandler());
		System.out.println(map);
	}
	
	//5:ColumnListHandler
	//将某一列的数据存入集合
	@Test
	public void func5() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		//可以获取某一列或多列的值
		List<Object> list = qr.query("select * from product where pid = 6", new ColumnListHandler("pname"));
		for (Object object : list) {
			System.out.println(object);
		}
	}
	
	//4:BeanListHandler
	//负责将结果集中每一行的数据放入Java Bean对象
	//多个Java Bean对象存入集合:List<Product>
	@Test
	public void func4() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		List<Product> list = qr.query("select * from product", new BeanListHandler<Product>(Product.class));
		for (Product product : list) {
			System.out.println(product);
		}
	}
	
	
	//3:BeanHandler
	//负责将结果集中第一行的数据放入Java Bean对象
	@Test
	public void func3() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		Product p = qr.query("select * from product", new BeanHandler<Product>(Product.class));
		System.out.println(p);
	}
	
	
	
	//2:ArrayListHandler
	//负责将结果集中每一行的数据放入数组
	//将多个数组将入集合中:List<Object[]>
	@Test
	public void func2() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		List<Object[]> list = qr.query("select * from product", new ArrayListHandler());
		for (Object[] objects : list) {
			for (Object object : objects) {
				System.out.print(object+"\t");
			}
			System.out.println();
		}
		
	}
	//1:ArrayHandler:
	//负责将结果集中第一行的数据放入数组
	@Test
	public void func1() throws SQLException{
		QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
		//	Object[] array = {1,"联想",5000,1};
		Object[] array = qr.query("select * from product", new ArrayHandler());
		for (Object object : array) {
			System.out.println(object);
		}
	}
}	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 对于数据表的读操作 他可以把结果转换成List Array Set等java集合 便于程序员操作; 2 对于数据表的写操作 也变得很简单(只需写sql语句) 3 可以使用数据源 使用JNDI 数据库连接池等技术来优化性能 重用已经构建好的数据库连接对象 而不像php asp那样 费时费力的不断重复的构建和析构这样的对象 DBUtils包括3个包: org apache commons dbutils org apache commons dbutils handlers org apache commons dbutils wrappers DBUtils封装了对JDBC的操作 简化了JDBC操作 可以少写代码 org apache commons dbutils DbUtils 关闭链接等操作 QueryRunner 进行查询的操作 org apache commons dbutils handlers ArrayHandler :将ResultSet中第一行的数据转化成对象数组 ArrayListHandler将ResultSet中所有的数据转化成List List中存放的是Object[] BeanHandler :将ResultSet中第一行的数据转化成类对象 BeanListHandler :将ResultSet中所有的数据转化成List List中存放的是类对象 ColumnListHandler :将ResultSet中某一列的数据存成List List中存放的是Object对象 KeyedHandler :将ResultSet中存成映射 key为某一列对应为Map Map中存放的是数据 MapHandler :将ResultSet中第一行的数据存成Map映射 MapListHandler :将ResultSet中所有的数据存成List List中存放的是Map ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object org apache commons dbutils wrappers SqlNullCheckedResultSet :对ResultSet进行操作 改版里面的值 StringTrimmedResultSet :去除ResultSet中中字段的左右空格 Trim ">1 对于数据表的读操作 他可以把结果转换成List Array Set等java集合 便于程序员操作; 2 对于数据表的写操作 也变得很简单(只需写sql语句) 3 可以使用数据源 使用JNDI 数据库连接池等技术来优化性能 重用已经构建好的 [更多]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值