刚开始学ResultSetHandler前几种实现类学的有点慢,后面那几种实现类和前几种大相径庭,只要模仿着前面,后面也很容易就自己敲出来了,所以学起来就比较快了。
特别注意:第八种MapListHandler()他取数据库中的数据的时候,为什么不会打乱顺序取出来,为什么是有序的?因为它的源码是class org.apache.commons.dbutils.BasicRowProcessor$CaseInsensitiveHashMap继承了
" private static class CaseInsensitiveHashMap extends LinkedHashMap"
LinkedHashMap,所以有序。
代码如下:
package cn.itcast.jdbc2;
import java.sql.Connection;
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 cn.itcast.domain.Sort;
import cn.itcast.jabcutil.JDBCUtilsConfig;
/* 调用QueryRunner类方法query(Connection con,String sql,ResultSetHandler r, Object..params)
* ResultSetHandler r 结果集的处理方式,传递ResultSetHandler接口实现类
* Object..params SQL语句中的?占位符
注意: query方法返回值,返回的是T 泛型, 具体返回值类型,跟随结果集处理方式变化
*/
public class QueryRunnerDemo1 {
public static void main(String[] args) throws SQLException {
// arrayHandler();
//arrayListHandler();
//beanHandler();
//beanListHandler();
//columnListHandler();
//scalarHandler();
//mapHandler();
//mapListHandler();
}
private static Connection con = JDBCUtilsConfig.getConnection();
/*
* 结果集第一种处理方法, ArrayHandler 将结果集的第一行存储到对象数组中 Object[]
*/
public static void arrayHandler() throws SQLException {
QueryRunner qr = new QueryRunner();
String sql = "SELECT *FROM sort";
Object[] result1 = qr.query(con, sql, new ArrayHandler());
for (Object obj : result1) {
System.out.print(obj + "\t");
}
}
/*
* 结果集第二种处理方法,ArrayListHandler 将结果集的每一行,封装到对象数组中, 出现很多对象数组 对象数组存储到List集合
*/
public static void arrayListHandler() throws SQLException {
QueryRunner qr = new QueryRunner();
String sql = "SELECT *FROM sort";
qr.query(con, sql, new ArrayListHandler());
List result2 = qr.query(con, sql, new ArrayListHandler());
System.out.println(result2.getClass());
for (Object[] objs : result2) {
for (Object obj : objs) {
System.out.print(obj + " ");
}
System.out.println();
}
}
/*
* 结果集第三种处理方法,BeanHandler 将结果集的第一行数据,封装成JavaBean对象 注意: 被封装成数据到JavaBean对象,
* Sort类必须有空参数构造
*/
public static void beanHandler() throws SQLException {
QueryRunner qr = new QueryRunner();
String sql = "SELECT *FROM sort";
Sort s = qr.query(con, sql, new BeanHandler(Sort.class));
System.out.println(s);
}
/*
* 结果集第四种处理方法, BeanListHandler
* 结果集每一行数据,封装JavaBean对象
* 多个JavaBean对象,存储到List集合
*/
public static void beanListHandler()throws SQLException{
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort ";
//调用方法query,传递结果集处理实现类BeanListHandler
List list = qr.query(con, sql, new BeanListHandler(Sort.class));
for(Sort s : list){
System.out.println(s);
}
}
/*
* 结果集第五种处理方法,ColumnListHandler
* 结果集,指定列的数据,存储到List集合
* List 每个列数据类型不同
*/
public static void columnListHandler() throws SQLException {
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort ";
List result4 = qr.query(con, sql, new ColumnListHandler("sname"));
for(Object obj:result4) {
System.out.println(obj);
}
}
/*
* 结果集第六种处理方法,ScalarHandler
* 对于查询后,只有1个结果
*/
public static void scalarHandler() throws SQLException {
QueryRunner qr = new QueryRunner();
String sql = "SELECT COUNT(*) FROM sort ";
long count=qr.query(con, sql, new ScalarHandler());
System.out.println(count);
}
/*
* 结果集第七种处理方法,MapHandler
* 将结果集第一行数据,封装到Map集合中
* Map<键,值> 键:列名 值:这列的数据
*/
public static void mapHandler() throws SQLException {
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort ";
Map map=qr.query(con, sql, new MapHandler());
for(String key:map.keySet()) {
System.out.println(key+"..."+map.get(key));
}
}
/*
* 结果集第八种处理方法,MapListHandler
* 将结果集每一行存储到Map集合,键:列名,值:数据
* Map集合过多,存储到List集合
*/
public static void mapListHandler() throws SQLException {
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort ";
List> list= qr.query(con, sql, new MapListHandler());
for(Map map:list) {
System.out.println("#######"+map.getClass());
for(String key:map.keySet()) {
System.out.print(key+" "+map.get(key)+" ");
}
System.out.println();
}
}
}