了解DatabaseMetaData的方法

时间:2012-07-30 22:06:04

标签: java mysql jdbc metadata

我正在使用MySql,JDBC,Java来制作我的代码。我无法理解API中的某些术语是什么意思。它阻止我做以下工作 - 要生成检查特定数据库是否存在的代码,请检查该数据库中是否存在特定的表DB,然后检查该表中的特定列。

每个表格描述都包含以下列:

TABLE_CAT String => table catalog (may be null)
TABLE_SCHEM String => table schema (may be null)
TABLE_NAME String => table name
TABLE_TYPE String => table type. Typical types are "TABLE", "VIEW", "SYSTEM     TABLE",     "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
REMARKS String => explanatory comment on the table
TYPE_CAT String => the types catalog (may be null)
TYPE_SCHEM String => the types schema (may be null)
TYPE_NAME String => type name (may be null)
SELF_REFERENCING_COL_NAME String => name of the designated "identifier" column of a typed table (may be null)
REF_GENERATION String => specifies how values in SELF_REFERENCING_COL_NAME are  created.      
Values are "SYSTEM", "USER", "DERIVED". (may be null)

什么是表目录,什么是表架构,SELF_REFERENCING_COL_NAME等?

2 个答案:

答案 0 :(得分:1)

Connector/JDatabaseMetadata实施而言,TABLE_CAT返回数据库名称(如CREATE DATABASE中所示); <{1}}为TABLE_SCHEM且未返回null

这是特定于数据库和驱动程序的。例如,Oracle ojdbc drivers将返回SELF_REFERENCING_COL_NAME nullTABLE_CAT的对象所有者。


针对您的特定任务(MySQL + Connector / J):

  1. 检查特定数据库是否存在→使用TABLE_SCHEM获取getCatalogs(),迭代其行并检索ResultSet列,您的数据库应与其中一个值匹配。
  2. 要检查数据库是否包含特定表格,TABLE_CAT应返回非空getTables(databaseName, null, tableName, new String[]{"TABLE"})
  3. 要检查表格是否包含特定列→ResultSet应返回非空getColumns(databaseName, null, tableName, columnName)

答案 1 :(得分:0)

对于任何人的信息,来自我自己的库的实体层次结构。 database metadata hierarchy