【问题标题】:How to get a column by alias/label from Java's ResultSet?如何从 Java 的 ResultSet 通过别名/标签获取列?
【发布时间】:2012-08-08 00:11:42
【问题描述】:

假设我有一个 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.

【问题讨论】:

  • 过去它对我有用。我怀疑这是 JDBC 驱动程序问题。你用的是哪一个?
  • 另外,看起来您正在调用一个过程而不是 SQL!
  • @adarshr 是的,它是一个 SP(更新了我的问题)驱动程序是 jconn3.jar 版本:6.0 Build (25828)

标签: java jdbc resultset


【解决方案1】:

@Alper 很赚钱。

他们更改了驱动程序并添加了一个连接属性 GET_COLUMN_LABEL_FOR_NAME,您需要将其设置为“true”。我以为只针对resultSetMetaData,但显然不是那么多……

这很奇怪,但试试看。

参考Sybooks

Sybase 新闻组Article

【讨论】:

  • 好的,但只是在这里做个说明,检查属性对象/文件/事物可能是个好主意,因为它在我的版本中命名不同
【解决方案2】:

我不知道它是否相关,但在 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的其他参数

【讨论】:

    猜你喜欢
    • 2017-05-07
    • 1970-01-01
    • 2011-11-05
    • 2021-12-31
    • 2014-10-10
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    相关资源
    最近更新 更多