JDBC-DBUtils工具类的使用

DBUtils
java编程中数据库操作的实用工具,JDBC的简化开发工具包
三大核心类
QueryRunner 提供对sql语句操作的API
ResultSetHandler 接口,用于定义select操作后封装结果集
DbUtils 提供释放资源与事务处理的方法
主要使用方法:closeQuietly(Connection conn) //释放资源且不会抛出异常


QueryRunner
update(Connection conn,String sql,Object... params)
使用update()方法进行对数据库的增删改,返回int类型数据
这个int类型数据其实就是你执行成功了多少行sql语句
参数:
conn,数据库连接对象
sql,数据库增删改语句
Object... params,可变参数,用来对?占位符需要的参数传递

query(Connection conn, String sql, ResultSetHandler<T> rsh
, Object... params)

使用query方法进行数据库查找,返回T泛型数据
这个T泛型数据其实就是保存数据的结果集类型
参数:
conn,数据库连接对象
sql,数据库增删改语句
rsh,结果集类型

Object... params,可变参数,用来对?占位符需要的参数传递

ResultSetHandler
接口,用于定义select操作后封装结果集,常用有八大实现类
ArrayHandler:用数组接收查询的第一行结果
Object[] result = qr.query(conn, sql, new ArrayHandler(),params);

ArrayListHandler:用List集合接收多个查询后每行结果的数组对象
List<Object[]> result = qr.query(conn, sql, new ArrayListHandler(), params);

BeanHandler:用一个Bean类接收查询的第一行结果(Bean为自己创建的一个类,下面有例子)
Sort result = qr.query(conn, sql,new BeanHandler<Sort>(Sort.class),params);

BeanListHandler:用List集合接收多个查询后每行结果的Bean类对象
List<Sort> result = qr.query(conn, sql, new BeanListHandler<Sort>(Sort.class), params);

ColumnListHandler:用List集合接收查询的列信息
List<Object> result = qr.query(conn, sql, new ColumnListHandler<>("sname"), params);

ScalarHandler:用普通基本类型或引用类型变量接收一个查询结果
long result = qr.query(conn, sql, new ScalarHandler<>(), params);

MapHandler:用Map集合接收查询的第一行结果,键为列名,值为第一行对应数据
Map<String, Object> result = qr.query(conn, sql, new MapHandler(), params);

MapListHandler:用List集合接收多个查询后每行结果的Map对象

List<Map<String,Object>> result = qr.query(conn, sql, new MapListHandler(), params);

一个标准Bean类

package JDBCdomain;
//创建的Bean类需要有无参构造,因为在BeanHandler中查询结果有可能在数据库中没有,就返回null,如果没有无参构造会抛出RuntimeException
public class Sort {
	private int sid;
	private String sname;
	private double sprice;
	private String sdesc;
	public Sort() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Sort(int sid, String sname, double sprice, String sdesc) {
		super();
		this.sid = sid;
		this.sname = sname;
		this.sprice = sprice;
		this.sdesc = sdesc;
	}
	public int getSid() {
		return sid;
	}
	public void setSid(int sid) {
		this.sid = sid;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public double getSprice() {
		return sprice;
	}
	public void setSprice(double sprice) {
		this.sprice = sprice;
	}
	public String getSdesc() {
		return sdesc;
	}
	public void setSdesc(String sdesc) {
		this.sdesc = sdesc;
	}
	@Override
	public String toString() {
		return "Sort [sid=" + sid + ", sname=" + sname + ", sprice=" + sprice + ", sdesc=" + sdesc + "]";
	}
	
}


实例讲解

    我例子中使用的数据库表

     

package DBUtilsDemo;
//我使用的jar包为:commons-dbutils-1.6.jar,mysql-connector-java-5.1.37-bin.jar.
import java.sql.Connection;
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.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 JDBCdomain.Sort;
import jdbcutil.JDBCUtilsConfig;
/*
 * 使用QueryRunner工具类方法进行查询后处理
 * query(Connection conn,String sql,ResultSetHandler r,Object... params)
 * ResultSetHandler结果集处理方式,传递其接口的实现类
 * query方法返回类型为T泛型,随结果集处理方式变化
 */
public class QueryRunnerDemo2 {
	//建立数据库连接,这里JDBCUtilsConfig是我自己写的工具类,其作用就是返回Connection对象
	private static Connection conn = JDBCUtilsConfig.getConnection();
	
	public static void main(String[] args) throws SQLException {
		//arrayHandler();
		//arrayListHandler();
		//beanHandler();
		//beanListHandler();
		//columnListHandler();
		//scalarHandler();
		//mapHandler();
		mapListHandler();
		//释放资源
		DbUtils.closeQuietly(conn);
	}
	
	//8.使用MapListHandler处理结果集
	//用List<Map<String,Object>>存储
	//返回每行数据
	public static void mapListHandler() throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "select * from sort where sprice>?";
		Object[] params = {1999};
		//用List<Map<String,Object>>存储query()方法的返回值
		List<Map<String,Object>> result = qr.query(conn, sql, new MapListHandler(), params);
		//遍历集合
		for(Map<String,Object> map : result) {
			for(String key : map.keySet()) {
				System.out.print(key+"--"+map.get(key)+"\t");
			}
			System.out.println();
		}
	}
	
	//7.使用MapHandler处理结果集
	//键值对形式存储,键存储列名,值存储该列所有数据
	//返回第一行数据
	public static void mapHandler() throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "select * from sort where sprice>?";
		Object[] params = {1999};
		//返回Map集合存储query()方法的返回值
		Map<String, Object> result = qr.query(conn, sql, new MapHandler(), params);
		//遍历map集合
		for(String key : result.keySet()) {
			System.out.println(key+"-"+result.get(key));
		}
	}
	
	//6.使用ScalarHandler处理结果集
	//只返回一个结果
	public static void scalarHandler() throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "select count(*) from sort where sprice>?";
		Object[] params = {1999};
		long result = qr.query(conn, sql, new ScalarHandler<>(), params);
		System.out.println("大于1999金额的数据有"+result+"个");
	}
	
	//5.使用ColumnListHandler处理结果集
	//这个实现类传递列名称,将列的信息存储到List集合中
	public static void columnListHandler() throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "select * from sort where sprice>?";
		Object[] params = {1999};
		List<Object> result = qr.query(conn, sql, new ColumnListHandler<>("sname"), params);
		for(Object obj : result) {
			System.out.println(obj);
		}
	}
	
	//4.使用BeanListHandler处理结果集
	//这个实现类传递Bean类的class文件,将数据每行结果存放到List<Bean>中
	public static void beanListHandler() throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "select * from sort where sprice>?";
		Object[] params = {1999};
		//BeanListHandler接收结果集,返回结果用List接收
		List<Sort> result = qr.query(conn, sql, new BeanListHandler<Sort>(Sort.class), params);
		for(Sort s : result) {
				System.out.println(s);
		}
	}
	
	//3.使用BeanHandler处理结果集
	//这个实现类传递Bean类的class文件,将结果的第一行数据存放到一个Bean类对象中
	//注意,该Bean类对象需要有空参构造,用来存放可能查询为null的结果
	public static void beanHandler() throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "select * from sort where sprice>?";
		Object[] params = {1999};
		//BeanHandler,返回Bean这个类对象
		Sort result = qr.query(conn, sql,new BeanHandler<Sort>(Sort.class),params);
		System.out.println(result);
	}
	
	//2.使用ArrayListHandler处理结果集,将每一行数据封装到对象数组中,使用List<Object[]>接收
	public static void arrayListHandler() throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "select * from sort where sprice>?";
		Object[] params = {1999};
		//调用query方法,传递参数数据库连接对象,sql语句,ArrayListHandler处理机,?占位符参数
		//返回多行对象数组
		List<Object[]> result = qr.query(conn, sql, new ArrayListHandler(), params);
		//打印多行数据结果
		for(Object[] objArr : result) {
			for(Object obj : objArr) {
				System.out.print(obj+"\t");
			}
			System.out.println();
		}
	}
	
	//1.使用ArrayHandler处理结果集,返回查询结果的第一行数据,使用Object[]接收
	public static void arrayHandler() throws SQLException{
		QueryRunner qr = new QueryRunner();
		String sql = "select * from sort where sprice>?";
		Object[] params = {1999};
		//调用query方法,传递数据库连接对象,sql语句,ArrayHandler处理集,?占位符参数
		//返回值是对象数组
		Object[] result = qr.query(conn, sql, new ArrayHandler(),params);
		//打印查询结果第一行数据
		for(Object obj : result) {
			System.out.print(obj+"\t");
		}
	}
	
}
包下载地址JDBC使用包


阅读更多

没有更多推荐了,返回首页