我正在使用Oracle 12cr1数据库。如果列名是小写的,我看起来无法使用列名从ResultSet
获取值。
创建表create table "Tab" (col number, "col" varchar2(10))
,因此第二列是小写的。如果我拨打getString("col")
,我将获得第一列的值。如果我拨打getString("\"col\"")
,我将收到无效的列名称错误。
但是,如果我使用列索引,它可以正常工作。
答案 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
列标签来使列标签唯一,或者您应该通过索引获取列。