ResultSetMetaData 类
调用ResultSet 的getMetaData()方法得到ResultSetMetaData 类对象;
可用于获取关于 ResultSet 对象中列的类型和属性信息的对象:
getColumnName(int column):获取指定列的名称
getColumnTypeName(int column):检索指定列的数据库特定的类型名称。
getColumnDisplaySize(int column):指示指定列的最大标准宽度,以字符为单位。
isNullable(int column):指示指定列中的值是否可以为 null。
主要使用方法:
String getColumnLabel(int column):获取指定的列的别名,其中索引从1开始
getColumnCount():返回当前 ResultSet 对象中的列数。
Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列,数据类型,触发器,存储过程等各方面的信息。根据这些信息,JDBC可以访问一个实现事先并不了解的数据库。
获取这些信息的方法都是在DatabaseMetaData类的对象上实现的,而DataBaseMetaData对象是在Connection对象上获得的。
public void testResultSetMetaData() {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "SELECT flow_id flowId, type, id_card iDCard, "
+ "exam_card examCard, student_name studentName, "
+ "location, grade " + "FROM examstudent WHERE flow_id = ?";
try {
conn=JDBCTools.getConnection();
ps=conn.prepareStatement(sql);
ps.setInt(1, 5);
rs=ps.executeQuery();
//得到ResultSetMetaData 对象
ResultSetMetaData rsmd=rs.getMetaData();
Map<String, Object> values = new HashMap<String, Object>();
if(rs.next()){
for (int i = 0; i < rsmd.getColumnCount(); i++) {
String columnLabel = rsmd.getColumnLabel(i + 1);// 别名
Object columnValue = rs.getObject(i + 1);
values.put(columnLabel, columnValue);//填充
}
}
//反射
Class clazz=Student.class;
Object obj=clazz.newInstance();
//遍历MAP
for(Map.Entry<String, Object> entry : values.entrySet()){
String fieldName = entry.getKey();
Object fieldValue = entry.getValue();
System.out.println(fieldName +":"+fieldValue);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCTools.close(rs, ps, conn);
}
}