DatabaseMetaData详解

发布时间 2023-04-03 10:52:50作者: 围观的小妖g

DatabaseMetaData接口是由JDBC驱动程序实现的,用于提供底层数据源相关的信息。该接口主要用于为应用程序或工具确定如何与底层数据源交互。应用程序也可以使用DatabaseMetaData接口提供的方法获取数据源信息。

DatabaseMetaData接口中包含超过150个方法,根据这些方法的类型可以分为以下几类:

(1)获取数据源信息。

(2)确定数据源是否支持某一特性或功能。

(3)获取数据源的限制。

(4)确定数据源包含哪些SQL对象以及这些对象的属性。

(5)获取数据源对事务的支持。

创建DatabaseMetaData对象

DatabaseMetaData对象的创建比较简单,需要依赖Connection对象。Connection对象中提供了一个getMetadata()方法,用于创建DatabaseMetaData对象。

一旦创建了DatabaseMetaData对象,我们就可以通过该对象动态地获取数据源相关的信息了。下面是创建DatabaseMetaData对象并使用该对象获取数据库表名允许的最大字符数的案例,代码如下:

Connection connection = DriverManager.getConnection("jdbc:mysql://XXXX/demo",
      "XXXX",
      "XXXX");
DatabaseMetaData dmd = connection.getMetaData();

获取数据源的基本信息

		//获取数据源的基本信息
    System.out.println("数据库URL:" + dmd.getURL());
    System.out.println("数据库用户名:" + dmd.getUserName());
    System.out.println("数据库产品名:" + dmd.getDatabaseProductName());
    System.out.println("数据库产品版本:" + dmd.getDatabaseProductVersion());
    System.out.println("驱动主版本:" + dmd.getDriverMajorVersion());
    System.out.println("驱动副版本:" + dmd.getDriverMinorVersion());
    System.out.println("数据库供应商用于schema的首选术语:" + dmd.getSchemaTerm());
    System.out.println("数据库供应商用于catalog的首选术语:" + dmd.getCatalogTerm());
    System.out.println("数据库供应商用于procedure的首选术语:" + dmd.getProcedureTerm());
    System.out.println("null值是否高排序:" + dmd.nullsAreSortedHigh());
    System.out.println("null值是否低排序:" + dmd.nullsAreSortedLow());
    System.out.println("数据库是否将表存储在本地文件中:" + dmd.usesLocalFiles());
    System.out.println("数据库是否为每个表使用一个文件:" + dmd.usesLocalFilePerTable());
    System.out.println("数据库SQL关键字:" + dmd.getSQLKeywords());

注意:由于HSQLDB驱动对DatabaseMetaData接口的getSQLKeywords()方法没有任何实现逻辑,只返回一个空字符串,因此上面的代码获取数据库SQL关键字内容为空。

获取数据源支持特性

DatabaseMetaData接口中提供了大量的方法用于确定数据源是否支持某个或一组特定的特性。除此之外,有些方法用于描述数据源对某一特性的支持级别。

获取数据源限制

获取SQL对象及属性

获取SQL对象及属性

JDBC API doc地址: https://docs.oracle.com/javase/8/docs/api/index.html

注意:摘要于《mybatis3源码深度解析》