Java 数据库元数据

获取表元数据:

String[] types =   
            { "TABLE" };   
            ResultSet rs = dbMetaData.getTables(null, schemaName, "%", types);   
            while (rs.next())   
            {   
                String tableName = rs.getString("TABLE_NAME");   
                // table type. Typical types are "TABLE", "VIEW", "SYSTEM   
                // TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS",   
                // "SYNONYM".   
                String tableType = rs.getString("TABLE_TYPE");   
                // explanatory comment on the table   
                String remarks = rs.getString("REMARKS");   
                System.out.println(tableName + "-" + tableType + "-" + remarks);   
            }   

 

获取表各列元数据方式如下:

public TableMeta getTableMeta(String tableName) throws Exception{
        DatabaseMetaData dmd = con.getMetaData();
        ResultSet rs4PKey = dmd.getPrimaryKeys(catalog, scheme, tableName);
        ResultSet rs4FKey = dmd.getExportedKeys(catalog, scheme, tableName);
        ResultSet rs = dmd.getColumns(catalog, scheme, tableName, "%");
        TableMeta tm = new TableMeta();
        tm.setType("TABLE");
        tm.setShem(scheme);
        tm.setName(tableName);
        tm.setCols(handleRs(rs));
        tm.setKey(handleKeys(rs4PKey));
        tm.setfKey(handleFKeys(rs4FKey));
        return tm;
    }
    private Set<ColumnMeta> handleRs(ResultSet rs) throws Exception{
        Set<ColumnMeta> columns = new HashSet<ColumnMeta>();
        while (rs.next()) {
            ColumnMeta c = new ColumnMeta();
            c.setName(rs.getString("COLUMN_NAME"));
            c.setJdbcType(Integer.parseInt(rs.getString("DATA_TYPE")));
            c.setColumnSize(Integer.parseInt(rs.getString("COLUMN_SIZE")));
            c.setIsNull(rs.getString("IS_NULLABLE"));
            c.setRemark(rs.getString("REMARKS"));
            columns.add(c);
        }
        return columns;
    }
    
    private Set<PrimaryKeyMeta> handleKeys(ResultSet rs) throws Exception{
        Set<PrimaryKeyMeta> columns = new HashSet<PrimaryKeyMeta>();
        while (rs.next()) {
            PrimaryKeyMeta c = new PrimaryKeyMeta();
            c.setColumnName(rs.getString("COLUMN_NAME"));
            columns.add(c);
        }
        return columns;
    }
    
    private Set<ForeignKeyMeta> handleFKeys(ResultSet rs) throws Exception{
        Set<ForeignKeyMeta> columns = new HashSet<ForeignKeyMeta>();
        while (rs.next()) {
            ForeignKeyMeta c = new ForeignKeyMeta();
            c.setFkColumnName(rs.getString("FKCOLUMN_NAME"));
            c.setPkTableName(rs.getString("PKTABLE_NAME"));
            c.setPkColumnName(rs.getString("PKCOLUMN_NAME"));
            columns.add(c);
        }
        return columns;
    }

 参考:http://my.oschina.net/lison/blog/5434

转载于:https://www.cnblogs.com/yaohonv/archive/2012/12/13/2816902.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值