1、为什么使用ResultSetMetaData?如果只有一个结果集,但不知道该结果集中有多少列,列的名字是什么。
编写通用的查询方法时需要使用。
public <T> T get(Class<T> clazz,String sql,Object... args){
}
2、ResultSetMetaData是什么?
用户描述ResultSet对象。
3、ResultSetMetaData如何使用?
(1)得到ResultSetMetaData对象:调用ResultSet的getMetaData()方法
ResultSetMetaData rsmd = resultSet.getMetaData();
(2)ResultSetMetaData有哪些好用的方法?
int getColumnCount():SQL语句中包含哪些列
String getColumnLabel(int column):获取指定的列的别名,其中索引从1开始
获取结果集的每一列的列名:
while(resultSet.next()){
for(int i=0;i<rsmd.getColumnCount();i++){
String columnLabel = rsmd.getColumnLabel(i+1);
Object columnValue = resultSet.getObject(columnLabel);
}
}
4、使用ResultSetMetaData编写通用的方法
(1)得到ResultSet对象
(2)得到ResultSetMetaData对象
(3)创建一个Map<String,Object>对象,键:SQL查询的列的别名,值:列的值
(4)处理结果集,利用ResultSetMetaData填充3对应的Map对象
(5)若Map不为空集,利用反射创建clazz对应的对象
(6)遍历Map对象,利用反射为Class对象的对应的属性赋值