2011-12-15 55 views
0

我正在處理返回的列數不同的結果集,因此我需要知道哪些列存在。我發現我可以像這樣提取返回的列名稱:從jdbc的元數據對象獲取完整的列名稱

ResultSetMetaData meta = rs.getMetaData(); 
ArrayList<String> columns = new ArrayList<String>(); 
for (int i = 0; i < meta.getColumnCount(); i++) { 
    columns.add(meta.getColumnLabel(i+1)); 
} 

但是,這並沒有給我在SQL中定義的完整列名稱。 IE瀏覽器。

select events.id, events.name from events; 

顯示爲「ID,姓名」,而不是「events.id,events.name」連接表,並希望在名稱返回的列不同的時,這是非常糟糕的。

+0

看來,我可以用 meta.getTableName第(i + 1) 得到了CURENT所選列的表名值。 – slott 2011-12-15 14:01:52

回答

2

答案是:您無法從select語句中檢索表別名。但是,您可以檢索列的基礎表的名稱,因此您應該能夠使用ResultSetMetaData中的getTable(int)檢索它,因爲您不使用表別名,而是使用實際的表。

2

您必須在連接表時指定別名。有兩種方法 - getColumnName() - 返回列名稱和getColumnLabel() - 返回列標籤(別名)。如果未指定別名,則getColumnLabel()會返回與getColumnName()返回的值相同的值。

+0

別名不是必需的,我已經基於類名動態地構建了SQL語句,並且在這裏每個列名都以表名爲前綴,從而消除了對別名的需要。 – slott 2011-12-15 13:59:57