有沒有辦法使用Spring的SimpleJdbcTemplate獲取數據庫中所有表名的列表?從Spring獲取所有表名的列表SimpleJdbcTemplate
被查詢的數據庫是Oracle,如果這有幫助的話。謝謝。
有沒有辦法使用Spring的SimpleJdbcTemplate獲取數據庫中所有表名的列表?從Spring獲取所有表名的列表SimpleJdbcTemplate
被查詢的數據庫是Oracle,如果這有幫助的話。謝謝。
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);
}
您總是可以使用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));
}
這有可能是春季方面很重要,因爲事務管理器的交互類的東西。 – bmargulies 2009-11-23 01:38:53
我不認爲像這樣的只讀操作需要事務。唯一的問題可能是如果某人在執行操作時更改了架構,從而導致結果失效。如果這可能發生,你會遇到更大的問題。 – duffymo 2009-11-23 01:42:09
該鏈接目前正在重定向到一個phising網站 – Justin 2015-08-19 16:49:12
查詢USER_TABLES視圖,你會得到它們。
在sqlplus中徘徊,當然要先看看形狀。
根據我的經驗,應用程序的「表」通常是另一個模式中表的同義詞,因此您可能還必須查詢ALL_TABLES。 – Dan 2009-11-23 02:18:00
+1 - 這是迄今爲止最好的答案。尼斯。 – duffymo 2009-11-23 11:00:15