queryRunner.query 方法

public Map getUserByUserId_MAP(int userId){
Map map = null;
//获取连接
Connection conn = DBConnectionUtil.getConnection();
//创建SQL执行工具 
QueryRunner queryRunner = new QueryRunner();
//拼接SQL
String sql = "select * from user where userId = ?";
Object params[] = {userId};

try {
map = queryRunner.query(conn, sql, new MapHandler(), params);
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBConnectionUtil.closeConnection(conn);
}
return map;
}



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

你可能感兴趣的:(queryRunner.query 方法)