当前位置: 首页 > 面试题库 >

JDBC ResultSet获取具有表别名的列

戚俊人
2023-03-14
问题内容

假设我有一个类似的查询

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使用 基于 索引的索引-即它们从1(而不是0像Java索引一样)计数,因此1用于第一列,2第二列等。

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



 类似资料:
  • 问题内容: 请告诉我如何获取特定行的列值= 123的列名。 问题答案: 结果

  • 我想在前端获得所有woocommerce类别的子类别,结果如下: 这是我所拥有的(但不是我想要的): 这段代码显示了类别和子类别,但是子类别不在应该在的地方,子类别就像这样的单独链接:

  • 问题内容: 这个问题已经在这里有了答案 : SQLite删除查询错误 (3个答案) 7年前关闭。 我试图通过以下命令对SQLite中的表进行别名化(例如,这本书是我正在阅读“ Ramakrishnan的数据库管理系统”的书) 此代码给出了语法错误。在不使用别名的情况下,以下代码有效: 但是,如果我想为表加上别名,该怎么办?有人可以帮忙吗? 谢谢 问题答案: 该语句在单个表上运行,并且不使用表别名。

  • 问题内容: 看起来Instagram网站上的for每天都在变化。现在是,明天将是另一回事。例如(我把它缩短了,链接很长): 话虽如此,我需要修复脚本并对其进行硬编码,以便能够抓取该网页。 有人告诉我,我可以用来查找并将其存储以备后用。但是我仍然不知道如何实现这一目标,因此硒或汤可以从中获取并在以后存储或解析。 我现在所得到的就是这个。它有点脏,不是正确的,但是想法就在那里。 运行它时,我得到此输出

  • 问题内容: 我想学习如何从MS SQL数据库中获取具有标识列的所有表的列表。 问题答案:

  • 问题内容: 因此,我有一个包含几个列表的列表,这些列表都首先包含三个字符串,然后是一个浮点数,例如: 如何制作一个返回最大值的函数(此处为9.1931)?我试过了 但这只是给我一个清单。 编辑:此外,以任何方式我可以获取值来自何处的索引?喜欢,来自哪个子列表? 问题答案: 循环浏览外部列表,然后选择每个子列表的最后一个元素: 最好将所有与函数相关的变量保留在范围内(将列表作为参数传递,并且不要通过