2016-07-15 63 views
3

我想從下面的查詢得到的列名,PostgreSQL- getColumnName不工作,返回別名

SELECT 
    category as c1, 
    forecast_2016, 
    category, 
    rowcount, 
    item_number, 
    rowcount, 
    category, 
    avg_demand_2014_2015, 
    category, 
    avg_spend_2014_2015, 
    avg_demand_2014_2015, 
    avg_spend_2014_2015, 
    demand_2015 
FROM 
    ag_instrument_portfolio_master LIMIT 1 

Postgres的版本是9.3和Java 1.7版本,Java實現如下。

stmt = con.createStatement(); 
rs = stmt.executeQuery(query.toString()); 
ResultSetMetaData columnsMetadata = rs.getMetaData(); 
int i = 0; 
while (i < columnsMetadata.getColumnCount()) { 
    i++; 
    System.out.println("Name: " + columnsMetadata.getColumnName(i)); 
    System.out.println("Label: " + columnsMetadata.getColumnLabel(i)); 
} 

輸出是

Name: c1 
Label: c1 

但是,預期是

Name: category 
Label: c1 
+0

將'SELECT category as c1'更改爲'SELECT category' – Nicarus

+2

這是正確的列名稱。它在你的SQL中被定義爲。就Java而言,這是列名。在這種情況下,您需要更改查詢以返回類別而不是c1。 – ManoDestra

+0

@Nicarus,我有目的地給了別名以減少json的大小,我的記錄將在百萬 –

回答

5

鑑於該pgsql-jdbc郵件列表here的評論,似乎你現在看到的是「如設計「PostgreSQL JDBC驅動程序的行爲:

這是驅動程序從 服務器獲取的信息的限制,它僅返回驅動程序用於 列名和標籤的'標籤'。

與JDBC的許多其他方面一樣,給定功能的行爲通常可能因具體JDBC驅動程序的實現而異。

+0

謝謝戈登湯普森... –