【问题标题】:How to order by with result set?如何使用结果集排序?
【发布时间】:2019-04-08 09:07:26
【问题描述】:

我想用 SQL 制作排行榜。 因此,在我的情况下,我必须使用kills ORDER BY 才能对结果进行排序。

但是对于结果集,顺序是错误的。

HashMap<String, Integer> player_list = new HashMap<>();
preparedStatement = this.pvpBox.getDtb().getConnection().prepareStatement(
    "SELECT player_name, kills FROM players ORDER BY kills DESC LIMIT 10");
ResultSet resultSet = preparedStatement.executeQuery();

while (resultSet.next()) {
    player_list.put(resultSet.getString("player_name"), resultSet.getInt("kills"));
}

没有错误信息。

我已经在 PHPMyAdmin 的“SQL”部分尝试过,我得到了预期的结果..

表格示例:

player_name 杀死 玩家1 40 玩家2 20 玩家3 50 播放器4 10 玩家 5 30

实际结果:

player_name 杀死 玩家 5 30 玩家1 40 播放器4 10 玩家2 20 玩家3 50

预期结果:

player_name 杀死 玩家3 50 玩家1 40 玩家 5 30 玩家2 20 播放器4 10

我正在使用 Java 8 和 Apache 2。

解决方法:使用 LinkedHashMap 代替 HashMap(hashmap 没有任何顺序)。

【问题讨论】:

  • 您使用的是什么List 实现?它可能无法跟踪广告订单。
  • try SELECT player_name, kills FROM player ORDER BY 无限制地杀死 DESC。不确定它是否会有所帮助,但我想值得一试
  • @Alan 限制不应该干扰这个。
  • 您是否尝试在 while 循环中打印出结果以查看它们是否正确?正如@Andronicus 指出的那样,这可能是由不正确的List 实现引起的
  • @lealceldeiro 我知道。但谁知道它可能是那些奇怪的事情之一

标签: java sql


【解决方案1】:

您使用的player_list 显然不是List。使用put() 方法和两个参数,它看起来像Map

如果你使用的是HashMap,难怪顺序是任意的——HashMap 不保留任何排序。

您可能需要LinkedHashMap 或其他数据结构,例如您实际存储在列表中而不是地图中的自定义对象。

【讨论】:

  • 原提问者想评论:它与 LinkedHashMap 完美配合!题目解决了!
【解决方案2】:

player_list 是 hashmap 对象吗? Hashmap 不维护插入值的顺序。请尝试使用 LinkedHashMap 或 TreeMap。

【讨论】:

    【解决方案3】:

    我认为问题出在 player_list 上,它是一个未排序的地图实现。如果要保留映射中插入的顺序,请使用 LinkedHashMap。

    【讨论】:

      猜你喜欢
      • 2016-11-06
      • 1970-01-01
      • 2020-11-12
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 2013-08-12
      • 2012-06-28
      • 1970-01-01
      相关资源
      最近更新 更多