JDBC获取元数据
JDBC 元数据获取详解:探索数据库与结果集的底层信息
在 JDBC 编程中,除了执行 SQL 操作获取业务数据外,有时还需要获取数据库本身的信息(如数据库版本、支持的功能)或结果集的结构(如列名、数据类型)。这些描述数据的数据称为元数据(Metadata)。JDBC 提供了 DatabaseMetaData 和 ResultSetMetaData 两个核心接口,分别用于获取数据库元数据和结果集元数据。本文将详细讲解这两种元数据的获取与应用。
数据库元数据(DatabaseMetaData)
DatabaseMetaData 接口用于描述数据库的整体信息,通过 Connection.getMetaData() 方法获取,可获取数据库产品名称、版本、支持的 SQL 特性、表结构等底层信息。
核心方法与示例
(1)获取数据库基本信息
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
public class DatabaseMetaDataDemo {
public static void main(String[] args) {
try (Connection conn = JDBCUtil.getConnection()) { // 自定义连接工具类
// 获取数据库元数据对象
DatabaseMetaData metaData = conn.getMetaData();
// 1. 数据库产品信息
String productName = metaData.getDatabaseProductName(); // 如 "MySQL"
String productVersion = metaData.getDatabaseProductVersion(); // 如 "8.0.30"
int majorVersion = metaData.getDatabaseMajorVersion(); // 主版本号,如 8
int minorVersion = metaData.getDatabaseMinorVersion(); // 次版本号,如 0
// 2. JDBC 驱动信息
String driverName = metaData.getDriverName(); // 如 "MySQL Connector/J"
String driverVersion = metaData.getDriverVersion(); // 如 "8.0.30"
int driverMajor = metaData.getDriverMajorVersion(); // 驱动主版本
int driverMinor = metaData.getDriverMinorVersion(); // 驱动次版本
// 3. 连接信息
String userName = metaData.getUserName(); // 连接数据库的用户名
String url = metaData.getURL(); // 数据库连接 URL
// 打印信息
System.out.println("数据库产品:" + productName + " " + productVersion);
System.out.println("数据库版本:" + majorVersion + "." + minorVersion);
System.out.println("JDBC 驱动:" + driverName + " " + driverVersion);
System.out.println("连接用户:" + userName + ",URL:" + url);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
输出示例(MySQL):
数据库产品:MySQL 8.0.30
数据库版本:8.0
JDBC 驱动:MySQL Connector/J 8.0.30
连接用户:root@localhost,URL:jdbc:mysql://localhost:3306/test
(2)获取数据库中的表和 schema
DatabaseMetaData 提供了获取数据库中表、视图、列等结构信息的方法,返回 ResultSet 结果集: