java jdbc 元数据使用

1.设计

 设计的概念:

Option

Builder

Factory

Service  - Context

Handler - Adept

 

2.获取table

    static void getDataset(){
        Connection con=JdbcUtil.getConn();
        try
        {
            //检索给定目录中可用表的说明。只返回与目录、架构、表名和类型条件匹配的表说明。
            // 它们按表类型、表类别、表计划和表名称排序
            //catalog 包含目录名称的 String。对此参数提供 Null 值表示无需使用目录名称。
            //schema 包含架构名称模式的 String 值。对此参数提供 Null 值表示无需使用架构名称,对应:数据库
            //tableNamePattern 包含表名称模式的 String
            //types 含有要包含的表类型的字符串数组。Null 表示应包含所有表类型,典型的类型有"TABLE","VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY","LOCAL TEMPORARY", "ALIAS", "SYNONYM"
            String   catalog          = "day";  //对应数据库名称
            String   schemaPattern    = "*"; // mysql没有这个概念 sql server对应用户名称操作权限
            String   tableNamePattern = "student"; // 对应数据库名称
            String[] types            = {"TABLE"}; // 数据库中具体的类型 "TABLE"、"VIEW"、"SYSTEM TABLE"、"GLOBAL TEMPORARY"、"LOCAL TEMPORARY"、"ALIAS" 和 "SYNONYM"。
            DatabaseMetaData metaData = con.getMetaData();
            ResultSet ret= metaData.getTables(null,null,null,types);
            while (ret.next()) {


                String catalogName = ret.getString(1);
                String schemaName = ret.getString(2);
                String tableName = ret.getString(3);
                String columName = ret.getString(6);
                System.out.println(tableName);
                System.out.println(catalogName);
                System.out.println(columName);

//                ResultSetMetaData rsmd = ret.getMetaData();
//                int count =rsmd.getColumnCount();
//                for(int i=1;i<=count;i++)
//                {
//                    System.out.print(ret.getString(i)+"\n\t");
//                }
                //System.out.println("  " + username + " " + birthday + " " + sex  + " " + address);
            }
        }catch (SQLException e){
            e.printStackTrace();
        }
    }

 

3.获取colomn

    static void GetColumn(String tablename) throws SQLException {
        Connection conn = JdbcUtil.getConn();
        DatabaseMetaData metaData = conn.getMetaData();
        //
        String catalog = "ucent"; // 对应数据库名称
        String schemaPattern = "*"; // mysql没有这个概念 sql server对应用户名称操作权限
        String tableNamePattern = tablename; //
        String columnNamePattern = null;

        ResultSet result = metaData.getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern);

        while (result.next()) {
//            String columName = result.getString(4);// 列名称
//            String data_type = result.getString(5);// 列类型
//            System.out.println(columName);
//            System.out.println(data_type);

            String columnName = result.getString("COLUMN_NAME");
            String columnType = result.getString("TYPE_NAME");//数据类型
            String remark = result.getString("REMARKS");//数据类型
            int datasize = result.getInt("COLUMN_SIZE");//字段长度
            int digits = result.getInt("DECIMAL_DIGITS");//小数位数
            int nullable = result.getInt("NULLABLE");

            System.out.println(columnName+" "+columnType+" "+datasize+" "+digits + " "+ nullable +" " +remark);

//            ResultSetMetaData rsmd = result.getMetaData();
//            int count =rsmd.getColumnCount();
//            for(int i=1;i<=count;i++)
//            {
//                System.out.print(result.getString(i)+"\n\t");
//            }
        }
    }
注: result.getString(""); 中对应的fields名称如下:
TABLE_CAT,
TABLE_SCHEM,
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
TYPE_NAME,
COLUMN_SIZE,
BUFFER_LENGTH,
DECIMAL_DIGITS,
NUM_PREC_RADIX,
NULLABLE,
REMARKS,
COLUMN_DEF,
SQL_DATA_TYPE,
SQL_DATETIME_SUB,
CHAR_OCTET_LENGTH,
ORDINAL_POSITION,
IS_NULLABLE,
SCOPE_CATALOG,
SCOPE_SCHEMA,
SCOPE_TABLE,
SOURCE_DATA_TYPE,
IS_AUTOINCREMENT,
IS_GENERATEDCOLUMN,

 

posted @ 2020-03-23 15:01  leolzi  阅读(429)  评论(0编辑  收藏  举报