如何从Java的ResultSet中通过别名/标签获取列?

时间:2012-08-10 16:45:29

标签: java jdbc resultset

假设我有一个SP,最后会SELECT a as b FROM example_table

当我这样做时

// Some magical code goes here
ResultSet rs = callableStatement.executeQuery();
while(rs.next()) {
    System.out.printLn(rs.getString("b"));
}
// Some magical code goes here

我收到错误,告诉我该列不存在,但是当我更改rs.getString("a")的代码时,它将正确执行。这似乎是因为getString(String)按名称而不是别名/标签来提取列。

如何告诉ResultSet按标签/别名获取列,而不是通过名称来获取。

PS:我发现了一个类似的问题here.

2 个答案:

答案 0 :(得分:3)

@Alper在钱上。

他们更改了驱动程序并添加了一个您需要设置为“true”的连接属性GET_COLUMN_LABEL_FOR_NAME。我以为它只适用于resultSetMetaData,但显然不是那么多......

这很奇怪,但试试吧。

Sybooks中的参考

Sybase新闻组Article

答案 1 :(得分:1)

我不知道它是否相关但是在MySQL中存在类似的问题,您可以通过将?useOldAliasMetadataBehavior=true添加到连接字符串的末尾来避免。 Check this link for details

The link of an official explanation for the same case:这里说,在版本5.0.x之前,默认值设置为true,但在版本5.1之后,默认值设置为false。您还可以检查配置字符串here

的其他参数