我正在尝试从下面的查询中获取列名,
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 :(得分:5)
鉴于pgsql-jdbc
邮件列表here中的评论,您看到的是PostgreSQL JDBC驱动程序的“按设计”行为:
这是驱动程序从中获取的信息的限制 服务器,它只返回驱动程序随后用于的“标签” columnname和label。
与JDBC的许多其他方面一样,给定功能的行为通常可能因特定JDBC驱动程序的实现而异。