JDBC编程----DBUtils的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nrsc272420199/article/details/86032297

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);
		}
	}
}	

猜你喜欢

转载自blog.csdn.net/nrsc272420199/article/details/86032297