北大青鸟科海讲堂老师教你:jdbc metadata的用法
作者:未知 时间:2018-12-29 17:05
jdbc metadata,称为jdbc元数据,是描述jdbc连接、查询信息的方式。Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列,数据类型,触发器,存储过程等各方面的信息。根据这些信息,JDBC可以访问一个实现事先并不了解的数据库。
-
DatabaseMetaData:获得连接信息,主要是数据库信息
-
ResultSetMetaData:列信息
-
ParameterMetaData:参数信息
参考下面的案例
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);
//参数信息
ParameterMetaData pmd = ps.getParameterMetaData();
//通过获取参数个数来提高代码灵活性
int count = pmd.getParameterCount();
System.out.println("参数个数:" + count);
//打印数据库参数信息,MySQL的输出并不准确
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));
}
利用此功能,可以实现类似通用查询的功能,代码片段如下,此方式不能封装对象,只能用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);
}