当前位置: 首页 > 知识库问答 >
问题:

空结果集仍在计算为 true,JDBC

沈子昂
2023-03-14

我写了一个简单的检查方法来检查MySQL数据库中是否存在给定字符串ID的数据:

    public boolean checkForData(String etfSymbol){
    try (Connection conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD)) {
        if (conn != null) {
            PreparedStatement statement = conn.prepareStatement(CHECK_FOR_DATA);
            statement.setString(1, etfSymbol);
            ResultSet result = statement.executeQuery();
            if (!result.isBeforeFirst()){
                System.out.println("No data currently in database for this ETF");
                return false;
            }
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    System.out.println("Data already exists in database for this ETF");
    return true;
}

查询:

    final String CHECK_FOR_DATA = "SELECT COUNT(*) FROM basic_etf_data WHERE etf_name = (?)"

我可以用MySQL workbench确认表中没有我请求的id的数据(实际上根本没有数据),但条件的计算结果为true。以下是ResultSet的调试输出:

起初,“InvalidRowReason”使我相信它正在评估为真,因为索引实际上在第一个索引之前,但是 isBeforeFirst()的文档状态如下:

如果游标位于第一行之前,则为 true;如果游标位于任何其他位置或结果集不包含任何行,则为 false

然后我展开rowData,发现大小等于1:

我不知道这是怎么回事,因为我可以确认表中不存在任何行甚至任何数据。我错过了什么?

共有1个答案

东方飞捷
2023-03-14

因为您在SQL中进行计数,并且计数总是一个结果(一行),在您的情况下是0

SELECT * FROM basic_etf_data WHERE etf_name = ? LIMIT 1
 类似资料:
  • 假设我有bean,具有以下属性: 字符串名 字符串lastName Statusenum Status 如何返回计算结果为true的? 如果上述方法不可取,那么推荐的最佳实践是什么?

  • 问题内容: 我希望将空结果集的总计设置为0。我尝试了以下方法: 结果: 子问题:上面的工作在Oracle中行不通吗? 问题答案: 在有关聚合函数的文档页面中: 应该注意的是,除了这些函数, 当没有选择任何行时 ,这些函数将 返回空值 。特别是,没有行返回空值,而不是预期的零值。必要时,该函数可用于将零替换为null。 所以,如果你想保证返回的值,适用于 结果 的,而不是它的参数: 至于Oracle

  • 问题内容: 我正在使用JDBC来实现非常简单的数据库连接。 我已经创建了连接/语句并执行了查询。我在调试器中检查语句的查询对象,以确认它正在发送正确的查询。然后,我再次检查了数据库中的查询(直接从调试器复制),以确保其返回数据。但是,返回的结果集在.next()上给出false 这里有我遗漏的常见陷阱吗? 还有myDB类(一个简单的包装程序,使我可以将连接/语句代码放入任何项目中) 编辑:根据建议

  • 我有一些意想不到的行为,我不明白。我正在尝试实现一个固定的可变时间步长,如中所述http://gafferongames.com/game-physics/fix-your-timestep/ 和http://gameprogrammingpatterns.com/game-loop.html. 当我在VisualStudio中运行程序时,我的内部while循环从来不会计算为true;但是,当我取

  • 问题内容: 这是我的数据库的快照。 col1和col2都声明为int。 我的ComputedColumn当前添加列1和2,如下所示… 取而代之的是,我的ComputedColumn应该将列1和2(在中间包含 ’-‘ 字符)连接起来,如下所示… 那么,正确的语法是什么? 问题答案: 您可能将计算列定义为。试试吧。 或者,如果您愿意,可以替换为或选择其他长度。

  • 问题内容: 可以说我有一个名为’ ‘的mysql表,具有以下值: 我想生成一份报告,说明每天有多少只动物报名(我不在乎一天中的时间)。因此,我从上面的示例表中寻找的最终结果是: 有没有一种方法可以在mysql中执行此操作,或者我需要使用另一种语言(如PHP)来计算总数吗? 任何想法表示赞赏,谢谢 问题答案: 会给您您所追求的。