Return 从数据库中排序键值对 - Java

Return ordered key value pairs from database - Java

我正在尝试从 derby 数据库中的键值对创建联赛 table - 数据库中的行只有两列,TeamName 和 Goals。

我需要将它们添加到我的 GUI class 以便我可以将键和值设置为联盟中的 JLabels table。按照总目标从上到下排序。

据我所知,LinkedHashMap 和 TreeSet 应该都可以帮助我。

我目前拥有的代码:

public TreeMap viewTeams(){
    TreeMap teamData = new TreeMap();
    String viewTeams = "SELECT * FROM HUI.TEAM";
    connectToDatabase(dbName);
    try {
        stmt = dbConnection.createStatement();
        rs = stmt.executeQuery(viewTeams);
    } catch (SQLException error) {
        System.err.println("Error querying database for teams: " + error.toString());
    } 
    try {
        while (rs.next()){
            teamData.put((rs.getString("TEAMNAME")), (rs.getInt("GOALSSCORED")));
        }
    } catch (SQLException error) {
        System.err.println("Error adding players to HasMap: " + error.toString());
    }
    return teamData;
}

在 TeamDB 中 class

public void updateLeagueTable(){
    TeamDB tdb = new TeamDB("FootManDatabase");
    TreeMap teamData = tdb.viewTeams(); // Do I need this new TreeMap?
    // How do I Iterate through the pairs in descending order?
}

在 GUI 中 class

我只想让 SQL 数据库进行排序,因为这是它可以做得很好的一件事。

此外,您不能使用 TreeMap<String, Integer>,因为那样会按团队名称而不是目标进行迭代。而且您也不能使用 TreeMap<Integer, String>,因为它不允许重复,所以您将无法让两支球队得分相同。相反,我会使用一个列表。类似于以下内容(但请记住正确关闭您的资源,为清楚起见,我已将其省略)。

class TeamScore {
    private final String name;
    private final int numGoals;
    public TeamScore(String name, int numGoals) {
        this.name = name;
        this.numGoals = numGoals;
    }
    // getters...
}


public List<TeamScore> viewTeams() throws SQLException {
    List<TeamScore> teamData = new ArrayList<>();
    String viewTeams = "SELECT * FROM HUI.TEAM ORDER BY GOALSSCORED DESC";
    connectToDatabase(dbName);
    stmt = dbConnection.createStatement();
    rs = stmt.executeQuery(viewTeams);
    while (rs.next()) {
        teamData.add(new TeamScore(rs.getString("TEAMNAME"), rs.getInt("GOALSSCORED"));
    }
    return teamData;
}