2011-10-18 99 views
0

我正在開發一個Java GUI項目;在它的一個屬性屏幕中,我使用3個組合框來獲取:第一個用戶選擇數據庫名稱,其值爲2.Schema名稱以及該模式下的所有表名。從DB獲取值並設置它們時,使用ResultSet時可以。但是用這種方法,我只能帶上一個值,因爲你知道ResultSet的工作方式。那麼有什麼其他的方式可以讓我們說所有的表名:使用Java從Oracle獲取表名稱?

SELECT TABLE_NAME FROM ALL_TABLES;並把它們放在一個字符串或某個數組上......任何可能的東西,我只想把它們的名字放在一個列表或任何東西中。

謝謝。

編輯:

這裏爲宗旨測試的簡單的代碼:

ResultSet rs = null; 
PreparedStatement ps = null; 
String result; 
ps = conn.prepareStatement("SELECT TABLE_NAME FROM ALL_TABLES"); 

rs = ps.executeQuery(); 

while(rs.next()) 
{ 
     result = rs.getString(1); 
    System.out.println(rs.getString(1)); 
} 
+1

我們確實知道ResultSet是如何工作的,因此知道它可以包含多行。向我們顯示您的代碼,以便我們解決它。 –

+0

@JB Nizet:這很奇怪,考慮到獲得ResultSet的唯一方法是讓任何**行調用一個名爲next()的方法。 「下一個」這個詞通常會建議更多的行... –

+0

錯誤,是的。這就是爲什麼我說結果集可以包含多行,而不僅僅是OP在他的問題中所說的那樣。我錯過了什麼? –

回答

0

不確定'你知道結果集的工作方式'是什麼意思?這將從查詢返回的所有行:

while (rs.next()) { 
    System.out.print("Column 1 returned "); 
    System.out.println(rs.getString(1)); 
} 
+0

以及我認爲,「指定」像你說的值rs.getString(1)只返回第一列的第一行,對吧? – neocorp

+0

不,rs.getString(1)從當前行的第1列獲取值。在while循環的下一次迭代中,當前行將是ro2 2,然後是第3行,依此類推。 – StevieG

+0

是的,這很好,但只有當我在循環中添加rs.next()然後將其打印出來時纔會發生。我該怎麼做? – neocorp

0

您需要基本quesry的元數據。請參閱example瞭解如何操作。

+0

謝謝,但在這種方式rs.getString(3)不僅返回一個奇怪的值,包括數字和字符,但也拋出java.lang.NullPointerException ...並且我也不想只得到1個表名像指定sth rs.getString(3);我想把它們全部放入數組或者某物中。我應該怎麼做? – neocorp

0

只需使用一個列表:

List<String> tableNames = new ArrayList<String>(); 
while(rs.next()) { 
    String tableName = rs.getString(1); 
    tableNames.add(tableName); 
} 
// there: your list contains all the table names 

閱讀tutorial about collections。這是所有Java開發人員必須知道的。

0

您也可以使用:更多信息

DatabaseMetaData metadata = currentConnection.getMetaData(); 
String[] names = {"TABLE"}; 
ResultSet tables = metadata.getTables(null,"%", "%", names); 
while (tables.next()) { 
    String tableName = tables.getString("TABLE_NAME"); 
    String tableSchema = tables.getString("TABLE_SCHEM"); 
} 

this

相關問題