java中获取数据库元数据主要通过connection.getmetadata()获取databasemetadata实例,调用其getdatabaseproductname()、gettables()、getcolumns()等方法获取数据库信息、表结构、主外键及索引等;需注意catalog/schema大小写敏感性、驱动差异与性能缓存。

Java 中获取数据库元数据信息主要通过 Connection 对象的 getMetaData() 方法,返回一个 DatabaseMetaData 实例,它提供了大量关于数据库本身、表结构、索引、主外键等的只读信息。
获取基础数据库信息
可用于识别数据库类型、版本、驱动信息等,对兼容性判断或日志记录很有用:
-
getDatabaseProductName():如 "MySQL"、"PostgreSQL"、"Oracle" -
getDatabaseProductVersion():如 "8.0.33" -
getDriverName()和getDriverVersion():查看 JDBC 驱动详情 -
getURL():当前连接使用的 JDBC URL
查询表与列结构
通过 getTables() 和 getColumns() 获取指定模式下的表和字段定义:
-
getTables(null, "schema_name", "%", new String[]{"TABLE"}):列出某 schema 下所有普通表(注意参数顺序:catalog、schema、table、types) -
getColumns(null, "schema_name", "user", "%"):获取user表所有列,返回ResultSet,每行含列名、类型、是否为空、注释(REMARKS列)等 - 常用字段:COLUMN_NAME、DATA_TYPE(SQL 类型代码)、TYPE_NAME(如 VARCHAR)、COLUMN_SIZE、IS_NULLABLE、REMARKS
获取主键、外键与索引
用于分析数据完整性约束或生成 ORM 映射:
-
getPrimaryKeys(null, "schema", "user"):查主键列名及顺序(KEY_SEQ) -
getImportedKeys(null, "schema", "user"):查该表作为“从表”时的外键(即哪些表引用了它) -
getExportedKeys(null, "schema", "user"):查该表作为“主表”时被哪些外键引用 -
getIndexInfo(null, "schema", "user", false, true):获取索引信息(不含主键),NON_UNIQUE=false可筛选唯一索引
注意事项与实用技巧
实际使用中容易踩坑,需留意以下几点:
- 部分数据库(如 MySQL)对
catalog参数不敏感,常传null;而 SQL Server、DB2 等依赖 catalog,需填库名 - schema 名称大小写敏感,尤其 PostgreSQL 默认小写,传参要用小写
- 某些字段(如
REMARKS)是否返回注释,取决于数据库配置和驱动支持(例如 MySQL 需在 URL 加useInformationSchema=true) - 元数据查询可能较慢,建议缓存结果,避免高频调用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











