将getColumnName()或getColumnLabel()用于getString()?

时间:2019-05-07 07:02:07

标签: java jdbc sas

我遇到了以前从未见过的SAS jdbc驱动程序问题,想知道正确的JDBC行为是什么。

假设我有一些ResultSetMetaData

metadata.getColumnName(index) -> col1
metadata.getColumnLabel(index) -> Column1

这是运行此查询时的SQL结果:

SELECT col1 AS Column1

ResultSet获取值时,我希望使用此值:

rs.getString("Column1") 

但是,相反,我似乎必须使用:

rs.getString("col1")

这是可以预期的吗?我的假设有误吗?还是这种特定于驾驶员的行为?

2 个答案:

答案 0 :(得分:1)

由于您使用别名,因此jdbc似乎在该列名参数中期望使用别名。

我找到了一个与此相关的链接:DB alias Resultset。  希望这会有所帮助

答案 1 :(得分:1)

在JDBC中,您通过列标签(别名)而不是列名来检索结果集的值。在您问题中的代码中,检索值的正确方法是使用rs.getString("Column1")(或-不区分大小写-rs.getString("COLUMN1")

这已在API中进行了记录,因为所有基于String的getter都具有以下文档:

  

参数:

     

columnLabel-使用SQL AS指定的列的标签   条款。如果未指定SQL AS子句,则标签为   列的名称

从历史上看,JDBC 3和更早的版本没有明确区分列标签和列名称,而直到今天,这些结果导致驱动程序要求您按列名称获取,或者允许您同时按列名称或标签获取,或从ResultSetMetaData.getColumnLabel(int)返回列名或从ResultSetMetaData.getColumnName(int)返回列标签,或具有配置选项以设置要使用的行为。