java - JDBC ResultSet 获取具有表别名的列

标签 java sql oracle jdbc resultset

想象一下我有一个类似的查询

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

可能两个表具有相同的列名。所以我认为通过

访问数据会很好
resultSet.getString("a.columnName");
resultSet.getString("b.columnName");

但这适得其反,我什么也得不到。我阅读了 API,但他们并没有真正谈论这个案例。这样的功能供应商是否依赖?

最佳答案

JDBC 将通过查询中指定的内容简单地命名列 - 它不知道表名等。

你有两个选择:

选项 1:在查询中以不同的方式命名列,即

SELECT
    a.columnName as columnNameA,
    b.columnName as columnNameB,
    ...
from table1 a, table2 b where (WHATEVER)

然后在您的 java 代码中引用列别名:

resultSet.getString("columnNameA");
resultSet.getString("columnNameB");


选项 2:在调用 JDBC API 时引用列位置:

resultSet.getString(1);
resultSet.getString(2);

请注意,JDBC API 使用 one-based 索引 - 即它们从 1 开始计数(而不是像 java 索引那样从 0 开始计数),所以第一列使用 1,第二列使用 2,以此类推


我会推荐选项 1,因为引用命名列更安全:有人可能会更改查询中列的顺序,它会默默地破坏您的代码(您将访问错误的列但不知道),但如果他们更改列名,您至少会在运行时获得“没有这样的列”异常。

关于java - JDBC ResultSet 获取具有表别名的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7224024/

相关文章:

sql - 如何在Windows中将Oracle SQL结果输出到文件中?

java - 如何使用有序边从顶点遍历并维持两步之外的排序

java - 在ObjectMapper中全局配置JavaTimeModule而不是使用@datetimeformat

java - JAX-RS 资源错误 : Couldn't find JAX-B element for class java. lang.String 和更多异常

sql - SQL 中的 Case 语句使用 Like

sql - SSMS - 在单个查询中查询多个服务器

oracle - 如何在一个选择查询中使用 Oracle 和 PostgreSQL 查询

java - 为什么 Java 语言环境不是常量?

sql - 编写 T-SQL 时使用 WHERE + AND + CASE + IN

vb.net - OracleCommand.BindByName = True 到底是什么意思?