在mysql中如何用java 获取表和字段的备注信息?谢谢

解决方案 »

  1.   

    用ResultSetMetaData:也得不到备注信息  该扎办呀!!!
     
    public void getResultSetMetaData() {
            String sqlStr = "SELECT * FROM STUDENTINFO";
            ResultSet rs = null;
            Statement smt = null;
            try {
                String[] tp = {"TABLE"};
                smt = conn.createStatement();
                rs = smt.executeQuery(sqlStr);
                ResultSetMetaData rsmd = rs.getMetaData();
                /*
                   获得ResultSetMeataData对象。所有方法的参数都是列的索引号,即第几列,从1开始
                */
                System.out.println("下面这些方法是ResultSetMetaData中方法");
                System.out.println("获得1列所在的Catalog名字 : " + rsmd.getCatalogName(1));
                System.out.println("获得1列对应数据类型的类 " + rsmd.getColumnClassName(1));
                System.out.println("获得该ResultSet所有列的数目 " + rsmd.getColumnCount());
                System.out.println("1列在数据库中类型的最大字符个数" + rsmd.getColumnDisplaySize(1));
                System.out.println("1列的默认的列的标题" + rsmd.getColumnLabel(1));
                System.out.println("1列的模式" + rsmd.getSchemaName(1));
                System.out.println("1列的类型,返回SqlType中的编号 " + rsmd.getColumnType(1));
                System.out.println("1列在数据库中的类型,返回类型全名" + rsmd.getColumnTypeName(1));
                System.out.println("1列类型的精确度(类型的长度): " + rsmd.getPrecision(1));
                System.out.println("1列小数点后的位数 " + rsmd.getScale(1));
                System.out.println("1列对应的模式的名称(应该用于Oracle) " + rsmd.getSchemaName(1));
                System.out.println("1列对应的表名 " + rsmd.getTableName(1));
                System.out.println("1列是否自动递增" + rsmd.isAutoIncrement(1));
                System.out.println("1列在数据库中是否为货币型" + rsmd.isCurrency(1));
                System.out.println("1列是否为空" + rsmd.isNullable(1));
                System.out.println("1列是否为只读" + rsmd.isReadOnly(1));
                System.out.println("1列能否出现在where中" + rsmd.isSearchable(1));
            }
            catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
      

  2.   

    DatabaseMetaData databaseMetaData = getCon().getMetaData();
    // 获取所有表
    // ResultSet tableSet = databaseMetaData.getTables(null, "%", "%",
    // new String[]{"TABLE"});
    // 获取tableName表列信息
    ResultSet columnSet = databaseMetaData.getColumns(null, "%",
    tableName, "%");
    if (null != columnSet) {
    while (columnSet.next()) {
    //列名
    String columnName = columnSet.getString("COLUMN_NAME");
                                            //备注
    String columnComment = columnSet.getString("REMARKS");
                                            //列类型
    int sqlType = columnSet.getInt("DATA_TYPE");.................
      

  3.   


    我需要获取表名,字段名,字段属性(类型,文字长度,默认值,备注)信息....
    字段的(文字长度,默认值)获取关键字 是那些?也就是除DATA_TYPE外 还有那些 谢谢~~~
      

  4.   

    getColumns
    ResultSet getColumns(String catalog,
                         String schemaPattern,
                         String tableNamePattern,
                         String columnNamePattern)
                         throws SQLException检索可在指定类别中使用的表列的描述。 
    仅返回与类别、模式、表和列名称标准匹配的列描述。它们根据 TABLE_SCHEM、TABLE_NAME 和 ORDINAL_POSITION 进行排序。 每个列描述都有以下列: TABLE_CAT String => 表类别(可为 null) 
    TABLE_SCHEM String => 表模式(可为 null) 
    TABLE_NAME String => 表名称 
    COLUMN_NAME String => 列名称 
    DATA_TYPE int => 来自 java.sql.Types 的 SQL 类型 
    TYPE_NAME String => 数据源依赖的类型名称,对于 UDT,该类型名称是完全限定的 
    COLUMN_SIZE int => 列的大小。对于 char 或 date 类型,列的大小是最大字符数,对于 numeric 和 decimal 类型,列的大小就是精度。 
    BUFFER_LENGTH 未被使用。 
    DECIMAL_DIGITS int => 小数部分的位数 
    NUM_PREC_RADIX int => 基数(通常为 10 或 2) 
    NULLABLE int => 是否允许使用 NULL。 
    columnNoNulls - 可能不允许使用 NULL 值 
    columnNullable - 明确允许使用 NULL 值 
    columnNullableUnknown - 不知道是否可使用 null 
    REMARKS String => 描述列的注释(可为 null) 
    COLUMN_DEF String => 默认值(可为 null) 
    SQL_DATA_TYPE int => 未使用 
    SQL_DATETIME_SUB int => 未使用 
    CHAR_OCTET_LENGTH int => 对于 char 类型,该长度是列中的最大字节数 
    ORDINAL_POSITION int => 表中的列的索引(从 1 开始) 
    IS_NULLABLE String => "NO" 表示明确不允许列使用 NULL 值,"YES" 表示可能允许列使用 NULL 值。空字符串表示没人知道是否允许使用 null 值。 
    SCOPE_CATLOG String => 表的类别,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null) 
    SCOPE_SCHEMA String => 表的模式,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null) 
    SCOPE_TABLE String => 表名称,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为 null) 
    SOURCE_DATA_TYPE short => 不同类型或用户生成 Ref 类型、来自 java.sql.Types 的 SQL 类型的源类型(如果 DATA_TYPE 不是 DISTINCT 或用户生成的 REF,则为 null) 
    有java-api 是多么的重要啊。呵呵
      

  5.   

    //获取所有表 
    //ResultSet tableSet = databaseMetaData.getTables(null, "%", "%", new String[]{"TABLE"}); 
    //获取tableName表列信息 
    ResultSet columnSet = databaseMetaData.getColumns(null, "%", tableName, "%"); 
    **********************************************************
    getColumns(null, "%", tableName, "%"); 
    这个规则定义 有哪些要求 或者格式 这点没看明白...
    **********************************************************
    **********************************************************
    还有
    databaseMetaData.getTables(null, "%", "%", new String[]{"TABLE"}); 
    好像有问题 老提示无数据 
    但用第二个指定固定的表名则正确显示了....
    **********************************************************