JDBC ResultSet获取具有表别名的列

假设我有一个类似的查询

SELECT * from table1 a, table2 b where (WHATEVER)

也许两个表都具有相同的列名。所以我虽然很高兴通过访问数据

resultSet.getString("a.columnName");

resultSet.getString("b.columnName");

但这事与愿违,我一无所获。我阅读了API,但是他们并没有真正谈论这种情况。这样的功能供应商依赖吗?

回答:

JDBC将仅通过查询中指定的名称来命名列-它不知道表名等。

您有两种选择:

在查询中使用不同的名称命名列,即

SELECT

a.columnName as columnNameA,

b.columnName as columnNameB,

...

from table1 a, table2 b where (WHATEVER)

然后在您的Java代码中参考列别名:

resultSet.getString("columnNameA");

resultSet.getString("columnNameB");

在对JDBC API的调用中,参考列的 位置

resultSet.getString(1);

resultSet.getString(2);

请注意,JDBC API使用 基于 索引的索引-即它们从1(而不是0像Java索引一样)计数,因此1用于第一列,2第二列等。

我建议使用选项1,因为引用命名的列更安全:有人可以更改查询中列的顺序,这会无声地破坏您的代码(您将访问错误的列,但不知道),但是如果它们更改列名,您至少会在运行时收到“无此列”异常。

以上是 JDBC ResultSet获取具有表别名的列 的全部内容, 来源链接: utcz.com/qa/420522.html

回到顶部