Java mysql十进制排序错误

时间:2012-12-16 05:36:45

标签: java mysql jdbc

我好像碰了一下。我正在为minecraft bukkit服务器创建一个“经济”系统。

我首先尝试按“富豪”排序,但收到的订单却不同。当我通过phpMyAdmin运行SQL时,它会以正确的顺序收到

enter image description here

enter image description here

public static HashMap<String, Double> topPlayers(String economyKey) {
    sql.build("SELECT b.balance, p.username FROM " + sql.prefix
            + "players p INNER JOIN " + sql.prefix + "balances b ON p.id=b.user_id WHERE economy_key=? ORDER BY b.balance DESC LIMIT 0,5");
    String[] params = { economyKey };

    ResultSet results = sql.executePreparedQuery(params);
    HashMap<String, Double> players = new HashMap<String, Double>();
    try {
        while (results.next()) {
            players.put(results.getString("username"), results.getDouble("balance"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

    return players;
}

2 个答案:

答案 0 :(得分:3)

您正在使用未订购的HashMap。尝试使用List或任何其他有序数据结构 - 它将解决您的问题。

答案 1 :(得分:2)

您正在使用HashMap,而不是保证元素的排序。

这是java.util.HashMap的API文档所说的内容:

此课程不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。

您应该选择实现SortedMap接口的具体类,该接口是 一个地图,它进一步提供其键的总排序

例如TreeMap就足够了,因为它实现了SortedMap接口。