mlczhg 发表于 2015-8-4 12:45:53

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 -- 返回列的头一个值
  
页: [1]
查看完整版本: apache.commons.dbutils.QueryRunner.query方法的handler参数