Java中通过DatabaseMetaData解析MySQL表结构的核心是调用JDBC标准接口:先用getTables(null,null,"%",new String[]{"TABLE"})获取表名与注释,再用getColumns(null,null,"表名","%")获取列名、类型、长度、空值性及默认值等字段详情,最后通过getPrimaryKeys()和getImportedKeys()/getExportedKeys()分别提取主键与外键约束信息。

Java 中通过 DatabaseMetaData 解析 MySQL 表结构,核心是调用 JDBC 提供的标准元数据接口,无需写 SQL,也不依赖 MySQL 特有语法,具备跨数据库兼容性。
获取所有表名和基础信息
先拿到连接的元数据对象,再用 getTables() 列出数据库中所有表:
- 参数依次为:
catalog(数据库名,可传null或当前库名)、schemaPattern(模式名,MySQL 通常用null)、tableNamePattern(表名模糊匹配,如"%"表示全部)、types(类型数组,new String[]{"TABLE"}过滤普通表) - 结果集字段包括
TABLE_NAME、TABLE_TYPE、REMARKS(部分驱动支持表注释) - 注意:MySQL 的 catalog 就是数据库名,schema 概念弱,一般填
null即可
获取指定表的字段详情
对某张表调用 getColumns(),能拿到完整列定义:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 参数顺序是:
catalog、schemaPattern、tableNamePattern、columnNamePattern;常用写法如metaData.getColumns(null, null, "user", "%") - 关键返回字段有:
COLUMN_NAME(列名)、TYPE_NAME(类型名,如 VARCHAR)、COLUMN_SIZE(长度)、NULLABLE(是否为空,值为DatabaseMetaData.columnNullable等常量)、COLUMN_DEF(默认值)、REMARKS(列注释) -
NULLABLE是整型,需判断是否等于DatabaseMetaData.columnNoNulls或columnNullable
提取主键和外键约束
完整性约束需单独查询,不能从 getColumns() 直接获得:
- 主键:调用
getPrimaryKeys(catalog, schema, table),结果含COLUMN_NAME和KEY_SEQ(复合主键时序号有用) - 外键分两种:
getImportedKeys()查本表哪些字段被其他表引用(即本表是“被参照方”),getExportedKeys()查本表哪些字段引用了别的表(即本表是“参照方”) - 外键结果中重要字段包括:
PKTABLE_NAME(主键所在表)、PKCOLUMN_NAME(主键列)、FKCOLUMN_NAME(外键列)、UPDATE_RULE/DELETE_RULE(级联动作,如importedKeyCascade)
注意事项与常见坑点
实际使用中几个关键细节容易出错:
- MySQL Connector/J 8.0+ 默认不返回
REMARKS(表/列注释),需在连接 URL 加参数:?useInformationSchema=true或启用includeInnodbStatusInShowCreate=true - 某些字段如
COLUMN_SIZE对 TEXT 类型可能返回 0 或 -1,应结合DATA_TYPE(SQL 类型码)判断实际含义 -
getCatalogs()返回的是数据库列表,但 MySQL 中它等价于SHOW DATABASES,系统库(如information_schema)需手动过滤 - 连接必须已执行过
USE database_name或 URL 中指定了默认库,否则getTables()可能查不到表
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










