首页 | 北大青鸟科海学院欢迎您
我的位置:主页 > 技术交流 >

北大青鸟科海讲堂老师教你: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);
        }



成功与现实 只差一个 
<

*  信息已加密,咨询老师会第一时间与您联系,请保持电话畅通

北大青鸟合肥科海学院:

在线职业规划老师:15656517280 金老师

合肥科海信息技术职业学校版权所有

皖ICP备09015552号-1

南校区地址:合肥市包河区合肥工业大学产业楼

北校区地址:安徽省合肥市北城区岗集镇

微信扫一扫

关注学校公众号

获得更多学校最新咨询