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,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)