2012-07-30 89 views
1

我正在使用MySql,JDBC,Java來編寫我的代碼。我無法理解API中的某些術語的含義。它阻止我做下面的工作 - 爲了製作檢查特定數據庫是否存在的代碼,然後檢查該數據庫中是否存在特定的表DB,然後檢查該表中的特定列。瞭解DatabaseMetaData的方法

每個表說明具有以下的列:

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等?

回答

1

只要Connector/J執行DatabaseMetadata有關TABLE_CAT返回數據庫名稱(如CREATE DATABASE); TABLE_SCHEMnullSELF_REFERENCING_COL_NAME不返回。

這是數據庫和驅動程序特定的。舉例來說,對於TABLE_CAT,Oracle ojdbc drivers將返回null,對象所有者爲TABLE_SCHEM


爲特定的任務(MySQL的+連接器/ J):

  1. 要檢查是否有特定的數據庫存在→使用getCatalogs()獲得ResultSet,迭代其行和檢索TABLE_CAT列,您數據庫應該匹配它的一個值。
  2. 若要檢查數據庫是否包含特定表→getTables(databaseName, null, tableName, new String[]{"TABLE"})應返回非空ResultSet
  3. 要檢查表是否包含特定列→getColumns(databaseName, null, tableName, columnName)應返回非空ResultSet
+0

非常感謝!你能否解釋其他術語的含義(如備註,REF_GENERATION等)以及它們的目的是什麼? – 2012-08-09 05:09:38

+0

至少在我的環境中(MySQL 5.1.63-0ubuntu0.11.04.1 + mysql-connector-java-5.1.21),GETTables不會返回'REF_GENERATION'和'TYPE_ *'。 'REMARKS'將帶來表註釋,但只有在連接屬性中'useInformationSchema'設置爲'true' – 2012-08-09 05:51:38

+0

我可以在哪裏獲得關於這些事情的更多信息? – 2012-08-10 17:21:33

0

對於任何人的信息,這裏來自我自己的圖書館的實體層次結構。 database metadata hierarchy