JDBC API 4.2(十):DatabaseMetaData 接口源码分析「建议收藏」

2022-11-16 10:17:58 浏览数 (1)

1、简介

DatabaseMetaData 接口提供了获取数据库元数据的方法,例如数据库名称,数据库版本,驱动程序名称,表总数,视图总数等。

该接口由驱动程序供应商实现,以使用户了解数据库管理系统(DBMS)的功能以及与之结合使用的基于JDBC技术的驱动程序。

不同的DBMS通常支持不同的功能,以不同的方式实现功能以及使用不同的数据类型。 另外,驱动程序可以在DBMS提供的功能之上实现功能。 该接口中方法返回的信息适用于特定驱动程序和特定DBMS协同工作的功能。

一些 DatabaseMetaData 方法采用的参数是字符串模式。 这些参数都具有诸如fooPattern之类的名称。 在模式字符串中,“%”表示匹配任何0个或多个字符的子字符串,“ _”表示匹配任何一个字符。 仅返回与搜索模式匹配的元数据条目。 如果将搜索模式参数设置为null,则将从搜索中删除该参数的条件。

2、常用方法

方法

描述

String getDriverName() throws SQLException

返回 JDBC driver 名称

String getDriverVersion() throws SQLException

返回 JDBC driver 版本

String getUserName()throws SQLException

返回数据库用户名

String getDatabaseProductName() throws SQLException

返回数据库产品名称

String getDatabaseProductVersion()throws SQLException

返回数据库产品版本

ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException

检索满足指定条件的可用表的描述。

3、示例

代码语言:javascript复制
public class DatabaseMetaDataDemo {
    public static void main(String[] args) {
        databaseInfo();
    }

    private static void databaseInfo() {      
        try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/lkf_db?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT", "root", "root");) {
            DatabaseMetaData dbmd = connection.getMetaData();
            System.out.println("Driver Name: "   dbmd.getDriverName());
            System.out.println("Driver Version: "   dbmd.getDriverVersion());
            System.out.println("UserName: "   dbmd.getUserName());
            System.out.println("Database Product Name: "   dbmd.getDatabaseProductName());
            System.out.println("Database Product Version: "   dbmd.getDatabaseProductVersion());
        } catch (SQLException e) {
            printSQLException(e);
        }
    }

    public static void printSQLException(SQLException ex) {
        for (Throwable e: ex) {
            if (e instanceof SQLException) {
                e.printStackTrace(System.err);
                System.err.println("SQLState: "   ((SQLException) e).getSQLState());
                System.err.println("Error Code: "   ((SQLException) e).getErrorCode());
                System.err.println("Message: "   e.getMessage());
                Throwable t = ex.getCause();
                while (t != null) {
                    System.out.println("Cause: "   t);
                    t = t.getCause();
                }
            }
        }
    }
}

输出:

代码语言:javascript复制
Driver Name: MySQL Connector/J
Driver Version: mysql-connector-java-8.0.15 (Revision: 79a4336f140499bd22dd07f02b708e163844e3d5)
UserName: root@localhost
Database Product Name: MySQL
Database Product Version: 8.0.17

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/223409.html原文链接:https://javaforall.cn

0 人点赞