北大青鳥科海講堂老師教你:jdbc metadata的用法
作者:未知 時間:2018-12-29 17:05

jdbc metadata,稱為jdbc元數(shù)據(jù),是描述jdbc連接、查詢信息的方式。Java 通過JDBC獲得連接以后,得到一個Connection 對象,可以從這個對象獲得有關(guān)數(shù)據(jù)庫管理系統(tǒng)的各種信息,包括數(shù)據(jù)庫中的各個表,表中的各個列,數(shù)據(jù)類型,觸發(fā)器,存儲過程等各方面的信息。根據(jù)這些信息,JDBC可以訪問一個實現(xiàn)事先并不了解的數(shù)據(jù)庫。
-
DatabaseMetaData:獲得連接信息,主要是數(shù)據(jù)庫信息
-
ResultSetMetaData:列信息
-
ParameterMetaData:參數(shù)信息
參考下面的案例
Connection con = DBUtil.getConnection();
// jdbc的連接信息
DatabaseMetaData cm = con.getMetaData();
System.out.println(cm.getDatabaseProductName());
System.out.println(cm.getDatabaseMajorVersion());
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>");
String sql = "select * from student where id>? and name like ?";
PreparedStatement ps = con.prepareStatement(sql);
//參數(shù)信息
ParameterMetaData pmd = ps.getParameterMetaData();
//通過獲取參數(shù)個數(shù)來提高代碼靈活性
int count = pmd.getParameterCount();
System.out.println("參數(shù)個數(shù):" + count);
//打印數(shù)據(jù)庫參數(shù)信息,MySQL的輸出并不準(zhǔn)確
for(int i = 1; i <= count; i ++) {
System.out.print(pmd.getParameterClassName(i) + " ");
System.out.print(pmd.getParameterType(i) + " ");
System.out.println(pmd.getParameterTypeName(i));
}
ps.setInt(1,40);
ps.setString(2,"%王%");//模糊查找
ResultSet rs = ps.executeQuery();
//列信息
ResultSetMetaData rm = rs.getMetaData();
System.out.println("總共有" + rm.getColumnCount() + "列");
for (int i = 1; i <= rm.getColumnCount(); i++) {
System.out.println(rm.getColumnLabel(i) + ","
+ rm.getColumnTypeName(i));
}
利用此功能,可以實現(xiàn)類似通用查詢的功能,代碼片段如下,此方式不能封裝對象,只能用Map封裝行信息:
rm為ResultSetMetaData 對象
ResultSet rs = ps.executeQuery();
List<Map> datas = new ArrayList<Map>();
while (rs.next()) {
Map entity = new HashMap();
for (int i = 1; i <= rm.getColumnCount(); i++) {
entity.put(rm.getColumnLabel(i),
rs.getObject(rm.getColumnLabel(i)));
}
datas.add(entity);
}
DBUtil.close(rs, ps, con);
for (Map m : datas) {
System.out.println(m);
}