Java mysql十进制排序错误
我好像撞到了一个肿块。我正在为minecraft bukkit服务器创建一个“经济”系统 我试着先按“最富有的人”排序,但是收到的排序是不同的。当我通过phpMyAdmin运行SQL时,它是以正确的顺序接收的Java mysql十进制排序错误,java,mysql,jdbc,Java,Mysql,Jdbc,我好像撞到了一个肿块。我正在为minecraft bukkit服务器创建一个“经济”系统 我试着先按“最富有的人”排序,但是收到的排序是不同的。当我通过phpMyAdmin运行SQL时,它是以正确的顺序接收的 public static HashMap<String, Double> topPlayers(String economyKey) { sql.build("SELECT b.balance, p.username FROM " + sql.prefix
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;
}
publicstatichashmap-topPlayers(字符串economyKey){
build(“从“+sql.prefix”中选择b.balance,p.username
+“玩家p内部连接”+sql.prefix+“平衡p.id上的b=b.user\u id,其中经济性\u键=?按b排序。平衡描述限制0,5”);
字符串[]params={economyKey};
ResultSet results=sql.executePreparedQuery(params);
HashMap players=newhashmap();
试一试{
while(results.next()){
players.put(results.getString(“用户名”)、results.getDouble(“余额”);
}
}捕获(SQLE异常){
e、 printStackTrace();
}
返回球员;
}
您正在使用未排序的HashMap。尝试使用一个或任何其他有序数据结构-它会解决您的问题。您使用的是非有序的HashMap。尝试使用或任何其他有序数据结构-它会解决您的问题。您使用的是一个不影响元素顺序的哈希映射
这就是API文档所说的:
该类不保证映射的顺序;特别是,它不能保证订单在一段时间内保持不变。
您应该选择一个具体的类,它实现了SortedMap
接口,该接口是一个映射,它进一步提供了对其键的总体排序
例如,TreeMap
就足够了,因为它实现了SortedMap
接口 您使用的是一个不确定元素顺序的HashMap
这就是API文档所说的:
该类不保证映射的顺序;特别是,它不能保证订单在一段时间内保持不变。
您应该选择一个具体的类,它实现了SortedMap
接口,该接口是一个映射,它进一步提供了对其键的总体排序
例如,TreeMap
就足够了,因为它实现了SortedMap
接口 如果您的方法返回接口(Map
),而不是实现(HashMap
,其顺序不可预测),则可以轻松切换到维护插入顺序的。如果您的方法返回接口(Map
),则可以轻松切换到维护插入顺序的而不是实现(HashMap
,其顺序是不可预测的)。您是正确的,我从while循环中输出到控制台,它确实正确地输出了它。我假设hashmap将按照首先放入的内容进行排序。谢谢linkedhashmap也会这样做。您是对的,我从while循环中输出到控制台,它确实正确地输出了它。我假设hashmap将按照首先放入的内容进行排序。谢谢linkedhashmap也可以这样做,因为它的目的是以有序的方式检查所有项目并打印它们-不需要HashMap-一个简单的LinkedList就可以了。但是op想要玩家的名字和分数,所以我想是这样的。一个简单的字符串连接就可以了(玩家是一个LinkedList):players.add(results.getString(“用户名”)+“”+results.getDouble(“余额”))
有一个链接的散列图可以保持顺序,因为它的目的是以有序的方式检查所有项目并打印它们-不需要散列图-一个简单的链接列表就可以了。但是op想要球员的名字和分数,所以我想。一个简单的字符串连接就可以了(球员就是链接列表):players.add(results.getString(“username”)+“”+results.getDouble(“balance”);
有一个链接的哈希映射来保持顺序