想象一下我有一个类似的查询
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/