java - 确定 JOIN 是否产生任何列

标签 java sql jdbc

我有一个带有多个连接的sql语句;有时有连接产生的记录,有时则没有。当连接为空时,这不是错误。

是否有一种方法可以测试特定联接是否为空,而不必捕获在结果集中未找到结果列时发生的异常?

换句话说,如果使用 JDBC,我执行以下 sql 语句:

select * from AA left outer join BB on AA.keyField = BB.keyField
  where keyField = "123"

我想知道该连接是否找到任何字段而不必捕获异常。如果我然后执行java语句:

String valueString = rs.getString("BB.keyField");

我遇到异常。我无法将 rs.getString("BB.keyField") 与 null 进行比较,因为如果 getString 在连接中没有找到任何值,则会引发异常。

我希望这能让问题更清楚,并且我很抱歉首先没有对其进行更多扩展。

最佳答案

查询不会返回具有此类名称的列。它只会使用列的简单名称(namekeyField 等)。在数据库查询工具中执行查询,您将看到为检索到的列分配了哪些名称。

您永远不应该执行select *,而应始终选择特定列。如果两列具有相同的名称,则应该为列分配别名:

select AA.id as aId, AA.name as aName, BB.id as bId, BB.name as bName from ...

然后,您就可以安全地使用

rs.getString("aId");
rs.getString("bName");
...

此外,抛出的异常包含一条消息,这应该可以帮助您识别问题。阅读。如果您不明白,请发布。

关于java - 确定 JOIN 是否产生任何列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10985228/

相关文章:

java - 当sql语句没有返回行时,resultset.next()总是返回true

java - 从图像中获取手写文本

java - 在路径上找不到 MainActivity

php - 当我的语句具有正确数量的参数和值时,为什么会出现 SQL 错误?

SQL - 使用分组依据和排序依据选择最低值?

sql-server - DatabaseMetaData getProcedureColumns 存储过程列名顺序?

Java 迭代器和嵌套哈希表的并发问题

java - Noughts & Crosses/Tic Tac Toe 获胜条件并在 Java/Android 中清除游戏(长文)

sql - 如果连接表中存在条目,如何显示字段?

java - Jboss Oracle JDBC 连接失败