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