代码之家  ›  专栏  ›  技术社区  ›  James Fisher

从数据库返回有序的键值对-Java

  •  2
  • James Fisher  · 技术社区  · 7 年前

    我正在尝试从derby数据库中的键值对创建一个联赛表-数据库中的行只有两列,TeamName&目标。

    我需要将这些设置到我的GUI类中,以便设置键&排名表中的JLabels值。按总目标自上而下排序。

    根据我所阅读的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类中

    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类中

    1 回复  |  直到 7 年前
        1
  •  0
  •   DodgyCodeException    7 年前

    我只想让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;
    }