使用列名从ResultSet获取小写列

时间:2017-02-23 03:03:09

标签: java oracle jdbc

我正在使用Oracle 12cr1数据库。如果列名是小写的,我看起来无法使用列名从ResultSet获取值。

创建表create table "Tab" (col number, "col" varchar2(10)),因此第二列是小写的。如果我拨打getString("col"),我将获得第一列的值。如果我拨打getString("\"col\""),我将收到无效的列名称错误。

但是,如果我使用列索引,它可以正常工作。

2 个答案:

答案 0 :(得分:0)

因为无论如何不应该在生产中使用SELECT *,重命名SELECT中的列将解决问题:

SELECT
    col AS col1
,   "col" AS col2
FROM "Tab"

现在你的两列有不同的别名,避免了歧义。

答案 1 :(得分:0)

来自ResultSet的JDBC API文档(强调我的):

  

用作getter方法输入的列名不区分大小写。当使用列名调用getter方法并且多个列具有相同名称时,将返回第一个匹配列的值。列名选项设计用于在生成结果集的SQL查询中使用列名时使用。对于未在查询中明确命名的列,最好使用列号。如果使用了列名,程序员应该注意保证它们唯一引用预期的列,这可以通过SQL AS子句来保证。

换句话说,对于API列名称(或更准确地说,列标签)不区分大小写,因此您无法实现所需。您需要通过提供AS列标签来使列标签唯一,或者您应该通过索引获取列。