2009-11-23 25 views

回答

12

Spring有一個DatabaseMetaDataCallback對象,它可以處理duffymo已經鏈接的解決方案的一些鍋爐板問題。調用JDBCUtils.extractDatabaseMetaData時,您可以傳遞該對象。

使用這些類創建相同呼叫的示例可以在here找到。從該鏈接

示例代碼:

類:

class GetTableNames implements DatabaseMetaDataCallback { 

     public Object processMetaData(DatabaseMetaData dbmd) throws SQLException { 
      ResultSet rs = dbmd.getTables(dbmd.getUserName(), null, null, new String[]{"TABLE"}); 
      ArrayList l = new ArrayList(); 
      while (rs.next()) { 
       l.add(rs.getString(3)); 
      } 
      return l; 
     } 
    } 

用法:

GetTableNames getTableNames = new GetTableNames(); 
try { 
    Object o = JdbcUtils.extractDatabaseMetaData(dataSource, getTableNames); 
    System.out.println(o); 
} catch (MetaDataAccessException e) { 
    System.out.println(e); 
} 
+2

+1 - 這是迄今爲止最好的答案。尼斯。 – duffymo 2009-11-23 11:00:15

4

您總是可以使用Connection自由獲取java.sql.DatabaseMetaData。 SimpleJdbcTemplate中沒有任何方法可以幫助您,但坦率地說沒有必要。

DatabaseMetaData md = c.getMetaData(); 
ResultSet rs = md.getTables(null, null, "%", null); 
while (rs.next()) { 
    System.out.println(rs.getString(3)); 
} 
+0

這有可能是春季方面很重要,因爲事務管理器的交互類的東西。 – bmargulies 2009-11-23 01:38:53

+1

我不認爲像這樣的只讀操作需要事務。唯一的問題可能是如果某人在執行操作時更改了架構,從而導致結果失效。如果這可能發生,你會遇到更大的問題。 – duffymo 2009-11-23 01:42:09

+1

該鏈接目前正在重定向到一個phising網站 – Justin 2015-08-19 16:49:12

1

查詢USER_TABLES視圖,你會得到它們。

在sqlplus中徘徊,當然要先看看形狀。

+0

根據我的經驗,應用程序的「表」通常是另一個模式中表的同義詞,因此您可能還必須查詢ALL_TABLES。 – Dan 2009-11-23 02:18:00