獲取數據庫的所有表:(以MySQL和Oracle為例,其他類型的數據庫接觸不過,不做解釋)
Connection接口中提供了DatabaseMetaData接口:
提供:getTables()方法,該方法需要傳進4個參數:
第一個是數據庫名稱,對于MySQL,則對應相應的數據庫,對于Oracle來說,則是對應相應的數據庫實例,可以不填,也可以直接使用Connection的實例對象中的getCatalog()方法返回的值填充;
第二個是模式,可以理解為數據庫的登錄名,而對于Oracle也可以理解成對該數據庫操作的所有者的登錄名。對于Oracle要特別注意,其登陸名必須是大寫,不然的話是無法獲取到相應的數據,而MySQL則不做強制要求。
第三個是表名稱,一般情況下如果要獲取所有的表的話,可以直接設置為null,如果設置為特定的表名稱,則返回該表的具體信息。
第四個是類型標準,以數組形式傳值,有"TABLE"、"VIEW"、"SYSTEM TABLE"、"GLOBAL TEMPORARY"、"LOCAL TEMPORARY"、"ALIAS" 和 "SYNONYM"這幾個經典的類型,一般使用”TABLE”,即獲取所有類型為TABLE的表
它返回一個ResultSet對象,有10列,詳細的顯示了表的類型:
TABLE_CAT String => 表類別(可為 null)
TABLE_SCHEM String => 表模式(可為 null)
TABLE_NAME String => 表名稱
TABLE_TYPE String => 表類型。
REMARKS String => 表的解釋性注釋
TYPE_CAT String => 類型的類別(可為 null)
TYPE_SCHEM String => 類型模式(可為 null)
TYPE_NAME String => 類型名稱(可為 null)
SELF_REFERENCING_COL_NAME String => 有類型表的指定 "identifier" 列的名稱(可為 null)
REF_GENERATION String
可根據需要使用
示例:
(MySQL)
DatabaseMetaData metaData = conn.getMetaData();
ResultSet rs = metaData.getTables(conn.getCatalog(), "root", null, new String[]{"TABLE"});
while(rs.next()) {
}
(Oracle)
DatabaseMetaData metaData = conn.getMetaData();ResultSet rs = metaData.getTables(conn.getCatalog(), "SCOTT", null, new String[]{"TABLE"});while(rs.next()) {
這兩處的代碼,唯一區別的是在第二個參數,Oracle不支持小寫的,必須是大寫的,換成小寫則什么都獲取不到,而MySQL則大小寫俱可,不過我建議是全部使用大寫,這里只是示例······
新聞熱點
疑難解答