第一次用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 -- 返回列的头一个值