2016-07-15 67 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

谢谢戈登汤普森... –