►JDBC的元数据接口有:
►DatabaseMetaData数据库级
►ResultSetMetaData结果集级
DatabaseMetaData (数据库元数据)
在对数据源进行连接以后,得到一个Connection 的对象,可以从这个对象获得有关数据源的各种信息,包括关于数据库中的各个表,表中的各个列,数据类型和存储过程等各方面的信息。根据这些信息,JDBC 程序可以访问一个事先并不了解的数据库。获取这些信息的方法都是在DatabaseMetaData的对象上实现的,而DatabaseMetaData对象是在Connection对象之上获得的。
DatebaseMetData 是由Connection对象 getMetaData() 方法得到
►数据库的一些常用信息可通过以下方法获得。
getURL //返回一个String对象,代表数据库的URL。
getUserName() //返回此连接使用的数据库的用户名。
isReadOnly() //返回一个boolean值,指示数据库是否只允许读操作。
getDatabaseProduceName() //返回数据库的产品名称。
getDatabaseProduceVersion() //返回数据库的版本号。
getDriverName() //返回驱动程序的名称。
getDriverVersion() //返回驱动程序的版本号。
例
@Test
public void aa() throws Exception{
Connection conn=MysqlDbUtils.getConnection();
DatabaseMetaData st=conn.getMetaData();
System.out.println(st.getURL());
System.out.println(st.getUserName());
System.out.println(st.getDatabaseProductName());
conn.close();
}
根据结果集的元数据,可以得到一个查询结果集关于查询表中列的个数、各个列名、类型以及各个列的宽度等。
ResultSetMetaData 的对象可以由ResultSet 对象的getMetaData()方法得到。
ResultSetMetaData 对象的常用方法如下
ResultSet rs = stmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
rsmd.getColumnCount() //返回目前ResultSet 对象的列数。
rsmd.getColumnDisplaySize(int column); //返回column指定的列的最大宽度。
rsmd.getColumnLabel(int column) //返回column 指定列的标签。
rsmd.getColumnName(int column) //返回column 指定列的列名
例
public static List<Map> query(String sql) throws Exception{
Connection conn=getConnection();
PreparedStatement pst= conn.prepareStatement(sql);
ResultSet rs=pst.executeQuery();
// 获取包含有关 ResultSet 对象列信息的 ResultSetMetaData 对象
ResultSetMetaData rsmd=rs.getMetaData();
//获取列的总数
int columnCount=rsmd.getColumnCount();
System.out.println(columnCount);
List list=new ArrayList();
while(rs.next()){
Map map=new HashMap();
for(int i=1;i<=columnCount;i++){
//获取列名
String colName=rsmd.getColumnName(i);
System.out.println(colName);
//获取对应的值
String colValue=rs.getString(i);
System.out.println(colValue);
//以键值对的方式存入map集合中
map.put(colName, colValue);
}
list.add(map);
}
rs.close();
pst.close();
conn.close();
return list;
}