通过connection.getmetadata()可获取databasemetadata实例,用于无需sql即可查询数据库类型、版本、表结构及约束等信息,包括基本信息、表列表、列定义、主键与外键约束。

直接通过 Connection 对象调用 getMetaData() 就能拿到 DatabaseMetaData 实例,它是 JDBC 提供的“数据库说明书”,不用写 SQL 就能查出数据库类型、版本、表结构、约束等关键信息。
获取数据库基本信息
连接建立后,立刻可读取数据库和驱动的核心标识:
-
getDatabaseProductName():返回实际产品名,如
"MySQL"、"PostgreSQL"、"Oracle" -
getDatabaseProductVersion():返回完整版本字符串,例如
"8.0.33"或"19c" - getDatabaseMajorVersion() 和 getDatabaseMinorVersion():返回整型主/次版本号,适合做兼容性判断
-
getDriverName() 和 getDriverVersion():识别当前 JDBC 驱动实现(如
"MySQL Connector/J") - getURL() 和 getUserName():确认连接来源与身份
- isReadOnly():判断当前连接是否处于只读模式
列出所有用户表及注释
用 getTables() 扫描数据库中可用的表,支持模糊匹配和类型过滤:
- 参数顺序为:
catalog(库名,MySQL 中常传null)、schemaPattern(模式,Oracle 常用用户名)、tableNamePattern(表名,支持"%"或具体名称如"user")、types(字符串数组,必须大写,如new String[]{"TABLE"}) - 结果集字段包括:
TABLE_NAME、TABLE_TYPE(区分 TABLE / VIEW / SYSTEM TABLE)、REMARKS(部分驱动支持表注释) - 示例:查所有以
"log_"开头的普通表:metaData.getTables(null, null, "log_%", new String[]{"TABLE"})
获取某张表的列定义详情
调用 getColumns() 可获得字段级结构,是生成实体类或校验字段变更的基础:
- 参数顺序:
catalog、schemaPattern、tableNamePattern、columnNamePattern;常用组合为(null, null, "user", "%") - 关键返回字段:
COLUMN_NAME(列名)、TYPE_NAME(数据库类型名,如"VARCHAR")、COLUMN_SIZE(长度)、NULLABLE(整型值,需对比DatabaseMetaData.columnNoNulls等常量判断是否允许为空)、REMARKS(列注释)、COLUMN_DEF(默认值表达式) - 注意:
NULLABLE返回的是数字,不是布尔值,不能直接用== true判断
查询主键与外键约束
完整性约束需分两步查,结果集中含关键关联字段:
-
主键:用
getPrimaryKeys(catalog, schema, table),结果含COLUMN_NAME和KEY_SEQ(复合主键时用于排序) -
外键(本表被其他表引用):用
getExportedKeys(catalog, schema, table),可获知哪些外部表通过什么列引用了本表 -
外键(本表引用其他表):用
getImportedKeys(catalog, schema, table),结果含PKTABLE_NAME(主键所在表)、PKCOLUMN_NAME(主键列)、FKCOLUMN_NAME(本表外键列)、UPDATE_RULE/DELETE_RULE(级联行为,如importedKeyCascade)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











