我遇到了以前从未见过的SAS jdbc驱动程序问题,想知道正确的JDBC行为是什么。
假设我有一些ResultSetMetaData
:
metadata.getColumnName(index) -> col1
metadata.getColumnLabel(index) -> Column1
这是运行此查询时的SQL结果:
SELECT col1 AS Column1
从ResultSet
获取值时,我希望使用此值:
rs.getString("Column1")
但是,相反,我似乎必须使用:
rs.getString("col1")
这是可以预期的吗?我的假设有误吗?还是这种特定于驾驶员的行为?
答案 0 :(得分:1)
由于您使用别名,因此jdbc似乎在该列名参数中期望使用别名。
我找到了一个与此相关的链接:DB alias Resultset。 希望这会有所帮助
答案 1 :(得分:1)
在JDBC中,您通过列标签(别名)而不是列名来检索结果集的值。在您问题中的代码中,检索值的正确方法是使用rs.getString("Column1")
(或-不区分大小写-rs.getString("COLUMN1")
)
这已在API中进行了记录,因为所有基于String
的getter都具有以下文档:
参数:
columnLabel
-使用SQLAS
指定的列的标签 条款。如果未指定SQLAS
子句,则标签为 列的名称
从历史上看,JDBC 3和更早的版本没有明确区分列标签和列名称,而直到今天,这些结果导致驱动程序要求您按列名称获取,或者允许您同时按列名称或标签获取,或从ResultSetMetaData.getColumnLabel(int)
返回列名或从ResultSetMetaData.getColumnName(int)
返回列标签,或具有配置选项以设置要使用的行为。