咨询电话:0551-62903161

学术交流

首页>官网首页 > 教育教学 > 学术交流 >
北大青鸟科海讲堂老师教你:jdbc metadata的用法
作者:未知  时间:2018-12-29 17:05
       jdbc metadata,称为jdbc元数据,是描述jdbc连接、查询信息的方式。Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列,数据类型,触发器,存储过程等各方面的信息。根据这些信息,JDBC可以访问一个实现事先并不了解的数据库。
  1.     DatabaseMetaData:获得连接信息,主要是数据库信息
  2.    ResultSetMetaData:列信息
  3.    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);
        }



友情链接:北大青鸟科海学院合肥滨湖职业技术学院合肥公交技校 安徽卫生健康职业学院
获奖信息:

地铁:乘地铁1号线到合工大南区B出口,向南800米即到。

联系我们:招生老师15056993965(微信手机同号)      0551-62903161

地址:合肥市包河区马鞍山路富成大厦4楼北大青鸟(合工大东门斜对面)