【问题标题】:How do I get the result from my query? (MySQL)如何从查询中获取结果? (MySQL)
【发布时间】:2019-01-02 17:50:35
【问题描述】:

我正在对玩家进行排名,我需要将结果输入 Java。

我的代码是

public static int getRank(UUID uuid) throws SQLException {
    checkConnection();
    PreparedStatement s = con.prepareStatement(
            "SET @rownum := 0; SELECT rank FROM ( SELECT @rownum := @rownum + 1 AS rank, wins, uuid FROM `SKYWARS` ORDER BY wins DESC ) as result WHERE uuid=?");
    s.setString(1, uuid.toString());

    ResultSet r = s.executeQuery();
    r.next();
    return r.getInt(1);
}

但是 s.execute() 返回 false,这意味着没有结果集。我如何获得结果集?在 MySQL 工作台中,它以网格形式返回值排名和获胜。

解决方案: 我在连接语句中添加了?allowMultiQueries=true。这使我的代码按原样工作。

【问题讨论】:

  • 从您的描述来看,这听起来更像是一个 Java 问题。添加标签可能会对您有所帮助。
  • 我不使用 Java,但许多 MySQL API 不允许您在一次调用中执行多个查询。将SET 语句放在单独的调用中。
  • @Barmar 我设置了一个属性以允许多查询
  • @UncleCarl 谢谢,会做的 编辑:我已经有了
  • 查看stackoverflow.com/questions/18297689/show-sql-error-message了解如何打印SQL错误信息。

标签: java mysql resultset rank


【解决方案1】:

@barmar 提出了一个很好的解决方案:

    public static int getRank(UUID uuid) throws SQLException {
    checkConnection();
    PreparedStatement s1 = con.prepareStatement(
            "SET @rownum := 0;");
    s1.execute();
    PreparedStatement s = con.prepareStatement(
            " SELECT rank FROM ( SELECT @rownum := @rownum + 1 AS rank, wins, uuid FROM `SKYWARS` ORDER BY wins DESC ) as rank WHERE uuid=?");
    s.setString(1, uuid.toString());
    if (!s.execute()) {
        System.out.println(123);
    } else {
        ResultSet r = s.executeQuery();
        r.next();
        return r.getInt(1);
    }
    return 0;
}

SET 语句可以拆分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 2017-07-11
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多