簡體   English   中英

Java DB數據庫,檢查所有表名

[英]Java DB Database, check for all table names

我在Java應用程序中有一個embedded Derby Database ,並且具有多個table's (這些table's已創建和刪除,因此沒有任何設置)。 我希望能夠返回database當前所有tables的名稱列表,因為我必須在應用程序中顯示該列表並從中獲取所有信息。

這樣做最簡單的方法? 我不需要代碼只是一個或多個方法。 我是一個糟糕的Google Fu用戶。

目前,我的代碼通過從輸入的特定表名中ResultSet來工作,但這僅用於測試目的,我需要能夠顯示我擁有的表的完整列表。


編輯:我當前的解決方法實際上不同於發布。 我只是擁有另一個table ,該表保存了所有已創建的表名,並在創建/刪除一個表時進行更新。 顯然這不是最好的方法,但它現在對我有用。

DatabaseMetaData metaData = connection.getMetaData();
ResultSet resultSet = metaData.getTables(null, "schenaName", "%" ,new String[] {"TABLE"} );
while (resultSet.next()) {
  System.out.println(resultSet.getString(3));
}

添加新答案:

 Connection connection = getDBConnection();
 DatabaseMetaData dbMetaData = connection.getMetaData();
 //getting catalogs for mysql DB, if it is not working for your DB, try dbMetaData.getSchemas();
 ResultSet catalogs = dbMetaData.getCatalogs();
 while(catalogs.next()){
       String catalogName = catalogs.getString(1);
         //excluding table names from "mysql" schema from mysql DB.
       if(!"mysql".equalsIgnoreCase(catalogName)){
            ResultSet tables = dbMetaData.getTables(catalogName, null, null, null);
            while(tables.next()){
                 System.out.println(catalogName + "::"+tables.getString(3));
            }
        }
  }

使用元數據是(某種程度上)更可移植的解決方案。 請注意,由於沒有目錄,因此Derby不需要目錄材料。 您可以直接使用目錄的null發出dmd.getTables(...)。 如果您跟蹤的所有表都在單個模式中(並且該模式中沒有其他表),則getTables(null,“ schemaName”,null,null)應該可以解決問題。

如果需要更多查詢,並且您不擔心可移植性,可以簽出

dataBaseMetaData工具 ,可讓您以表的形式訪問元數據,以便可以對它們執行聯接和其他復雜的查詢。

嘗試這個:

select tableName from sys.systables 

您應該獲取系統中的所有表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM