赞
踩
为了更简单的使用JDBC,Apache组织提供了一个工具类库commons-dbutils ,它是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。
DBUtils工具的核心是以下两个类:
org.apache.commons.dbutils.QueryRunner --BDManager
org.apache.commons.dbutils.ResultSetHandler—处理结果集
该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
QueryRunner类提供了一个带参数的构造方法,该 方法以javax.sql.DataSource作为参数传递到QueryRunner的构造 方法中来获取Connection对象。
如: QueryRunner runner=new QueryRunner(C3P0Utils.getDataSource())
QueryRunner类的主要方法
public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException
:
执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。
public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException:
几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得 Connection。
public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException
:
执行一个不需要置换参数的查询操作。
public int update(Connection conn, String sql, Object[] params) throws SQLException
:用来执行一个更新(插入、更新或删除)操作。
public int update(Connection conn, String sql) throws SQLException
:用来执行一个不需要置换参数的更新操作。
该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。
ResultSetHandler 接口的实现类
ArrayHandler:把结果集中的第一行数据转成对象数组。
ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
ScalarHandler:将结果集中某一行数据都封装到一个对应的JavaBean实例中,并存放到List里。
ColumnListHandler:将结果集中某一列的数据存放到List中。
KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。
MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
数据库:
/创建chapter03数据库,然后在数据库中创建一个表user,具体语句如下/
CREATE DATABASE chapter03;
USE chapter03;
CREATE TABLE user(
id INT(3) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
password VARCHAR(20) NOT NULL
);
/向user表插入三条数据,具体语句如下/
INSERT INTO user(name,password) VALUES('zhangsan','123456');
INSERT INTO user(name,password) VALUES ('lisi','123456');
INSERT INTO user(name,password) VALUES ('wangwu','123456');
/使用SELECT语句查询users表,SQL语句如下所示/
SELECT * FROM user;
将commons-dbutils-1.6.jar添加到项目中
把原来的JDBCUtils工具类换成C3p0Utils工具类
public class C3p0Utils {
private static DataSource ds;
static {
ds=new ComboPooledDataSource();
}
public static DataSource getDataSource(){
return ds;
}
}
该工具类创建的连接对象的打开,关闭,释放等都是通过C3p0连接池操作的,用户不用自己写。
private int id; private String name; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }
BeanHandler实现类是将结果集中的数据封装到对应的javabean实例中,这是实际开发中最常用的结果集处理方法。
public class ResultSetHandler1 {
public static void main(String[] args) throws SQLException {
// 创建QueryRunner对象
QueryRunner runner=new QueryRunner(C3p0Utils.getDataSource());
//sql语句
String sql="select * from user where id=?";
User user=(User) runner.query(sql,new BeanHandler(User.class),1);
System.out.println("name:"+user.getName());
}
}
BeanListHanlder实现类:将每一行的数据都封装到javabean实例中,并将其存放到list中
public class ResultSetHandler2 {
public static void main(String[] args) throws SQLException {
// 创建QueryRunner对象
QueryRunner runner=new QueryRunner(C3p0Utils.getDataSource());
//sql语句
String sql="select * from user";
List<User> list=runner.query(sql,new BeanListHandler<>(User.class));
for(User user:list){
System.out.println("name:"+user.getName());
}
}
}
ScalarHandler实现类:输出结果集中一行数据的指定字段值
public class ResultSetHandler3 {
public static void main(String[] args) throws SQLException {
// 创建QueryRunner对象
QueryRunner runner=new QueryRunner(C3p0Utils.getDataSource());
//sql语句
String sql="select * from user where id=?";
Object object=(Object) runner.query(sql,new ScalarHandler<>("name"),1);
System.out.println(object);
}
}
ArrayHandler:把结果集中的第一行数据转成对象数组。
public class ResultSetTest1 {
public static void main(String[] args) throws SQLException {
String sql="select * from user where id=?";
//该 方法以javax.sql.DataSource作为参数传递到QueryRunner的构造 方法中来获取Connection对象。
QueryRunner runner=new QueryRunner(C3p0Utils.getDataSource());
Object[] arr =(Object[]) runner.query(sql,new ArrayHandler(),1);
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中
public class ResultSetTest2 { public static void main(String[] args) throws SQLException { // 创建QueryRunner对象 QueryRunner runner=new QueryRunner(C3p0Utils.getDataSource()); //sql语句 String sql="select * from user"; List list=runner.query(sql,new ArrayListHandler()); Object[] arr=(Object[]) list.get(0); Object[] arr1=(Object[]) list.get(1); Object[] arr2=(Object[]) list.get(2); for(int i=0;i<arr.length;i++) { System.out.print(arr[i]+", "); } for(int i=0;i<arr1.length;i++) { System.out.print(arr1[i]+", "); } for(int i=0;i<arr2.length;i++) { System.out.print(arr2[i]+", "); } } }
MapHanlder类将结果集数据存成Map映射
public class ResultSetHandler4 {
public static void main(String[] args) throws SQLException {
// 创建QueryRunner对象
QueryRunner runner=new QueryRunner(C3p0Utils.getDataSource());
//sql语句
String sql="select * from user where id=?";
Map map=(Map) runner.query(sql,new MapHandler(),1);
System.out.println("map:"+map);
System.out.println("name:"+map.get("name"));
}
MapListHandler类成功将每一行结果集存成一个Map,并将所有Map存成list
public class ResultSetHandler5 {
public static void main(String[] args) throws SQLException {
// 创建QueryRunner对象
QueryRunner runner=new QueryRunner(C3p0Utils.getDataSource());
//sql语句
String sql="select * from user";
List list=runner.query(sql,new MapListHandler());
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
当查询结果集中的一列数据时,可以使用ColumnListHandler类
public class ResultSetHandler6 {
public static void main(String[] args) throws SQLException {
// 创建QueryRunner对象
QueryRunner runner=new QueryRunner(C3p0Utils.getDataSource());
//sql语句
String sql="select * from user";
List list=runner.query(sql,new ColumnListHandler<>("name"));
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
KeyedHandler类将结果集中的每一行数据都封装到一个Map里,然后再根据指定的key(id)把每个Map再存放到一个Map里。
public class ResultSetHandler7 {
public static void main(String[] args) throws SQLException {
// 创建QueryRunner对象
QueryRunner runner=new QueryRunner(C3p0Utils.getDataSource());
//sql语句
String sql="select * from user";
Map<Object,Map<String,Object>> map=runner.query(sql,new KeyedHandler<>("id"));
Map<String,Object> umap1=map.get(1);
System.out.println("第一行map:"+umap1);
System.out.println("第一行数据的name:"+umap1.get("name"));
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。