apache.commons.dbutils.QueryRunner.query方法的handler参数

第一次用apache.commons.dbutils.QueryRunner访问数据库的人会有一个疑问..

String url = "jdbc:mysql://localhost:3306/test";

Connection con = DriverManager.getConnection(url, "root", "pwd");

String sql = "select * from myTable";

QueryRunner qr = new QueryRunner();

qr.query(con, sql, handler); //con是数据库连接, sql是查询语句, handler是什么?

QueryRunner.query方法的返回值是一个Object对象,该Object对象保存着从数据库获取的数据,

它的类型(可显式转换的类型)是由调用query方法时的handler参数决定的.

ResultSetHandler handler = new ArrayHandler();

Object obj = qr.query(con, sql, handler);

Object[] arr = (Object[])obj;



ResultSetHandler handler = new ArrayListHandler();

Object obj = qr.query(con, sql, handler);

List list = (List)obj;

也就是说,保存数据的Object对象的显式转换类型是由handler参数决定的.

 

下面是handler参数和返回对象类型的对照表:

AbstractListHandler -- 返回多行List的抽象类

ArrayHandler --  返回一行的Object[]

ArrayListHandler -- 返回List,每行是Object[]

BeanHandler -- 返回第一个Bean对象

BeanListHandler -- 返回List,每行是Bean

ColumnListHandler -- 返回一列的List

KeyedHandler -- 返回Map,具体见代码

MapHandler -- 返回单个Map

MapListHandler -- 返回List,每行是Map

ScalarHandler -- 返回列的头一个值

 

你可能感兴趣的:(handler)