【问题标题】:My ResultSet is only doing one row with .next(), but I do have 3我的 ResultSet 只用 .next() 做一行,但我确实有 3 个
【发布时间】:2020-08-13 00:08:36
【问题描述】:

这是我的代码:

ResultSet chaserResults = LiteSQL.onQuery("SELECT count(*), id, name, geburt, geschlecht, speed, speedf, strength, strengthf, " +
                "val3, val3f, val4, val4f, val5, val5f, position FROM player WHERE position = 'Chaser' AND teamid = " + teamid);
        setchaser = new Chaser[chaserResults.getInt("count(*)")];
        int i = 0;
        while(chaserResults.next()){
            setchaser[i] = new Chaser(chaserResults.getInt("id"), chaserResults.getString("name"), chaserResults.getInt("geburt"),
                    teamResults.getInt("id"), chaserResults.getInt("geschlecht"), chaserResults.getInt("speed"),
                    chaserResults.getInt("speedf"), chaserResults.getInt("strength"), chaserResults.getInt("strengthf"),
                    chaserResults.getInt("val3"), chaserResults.getInt("val3f"), chaserResults.getInt("val4"),
                    chaserResults.getInt("val4f"), chaserResults.getInt("val5"), chaserResults.getInt("val5f"),
                    chaserResults.getString("position"));
            i++;
            System.out.println(i);
        }

我很抱歉我的编码不好!我真的不知道为什么,但它在第一行之后就停止了。我认为它可能是行“chaserResult.getInt("count(*)") 的东西,但我不知道如何替换它,因为我需要一个计算行数的方法。

【问题讨论】:

  • teamResults.getInt("id") 是什么?
  • 为什么不使用ArrayList而不是Array呢?
  • 你应该学会使用参数化查询,这样更安全,可以防止错误引用和SQL注入漏洞。此外,在聚合时,不在 GROUP BY 子句中的所有列都应该是聚合函数的参数。 SQLite 可能会接受该规则被打破,但大多数其他 DBMS 不接受。因此,当遵循标准规则时,代码更具可移植性。当这条规则被打破时,结果可能会很有趣。

标签: java sql sqlite


【解决方案1】:

结果中有count(*) 表示查询只返回1 行。

由于count() 是一个聚合函数,因此查询是一个聚合查询,正如SQLite Documentation 所说:

如果 SELECT 语句是一个没有 GROUP BY 子句的 聚合查询,则结果集中的每个聚合表达式都会在整个数据集上计算一次。结果集中的每个非聚合表达式都会针对数据集的任意选择的行进行一次评估。相同的任意选择的行用于每个非聚合表达式。或者,如果数据集包含零行,则每个非聚合表达式都针对完全由 NULL 值组成的行进行评估。

通过评估结果集中的聚合和非聚合表达式创建的单行结果集数据构成了不带 GROUP BY 子句的聚合查询的结果。 没有 GROUP BY 子句的聚合查询总是只返回一行数据,即使有零行输入数据。

【讨论】:

    猜你喜欢
    • 2016-04-24
    • 2014-02-05
    • 1970-01-01
    • 2011-07-20
    • 2017-08-10
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多