2017-12-28 4 views
2

Ich versuche, eine Liga-Tabelle aus Schlüsselwertpaaren in einer Derby-Datenbank zu erstellen - die Zeilen in der Datenbank haben nur zwei Spalten, TeamName & Ziele.Rückgabe der geordneten Schlüsselwertpaare aus der Datenbank - Java

Ich muss diese zu meiner GUI-Klasse bekommen, damit ich die Schlüssel & Werte als JLabels in der Rangliste setzen kann. Bestellt von oben nach unten in Bezug auf die Gesamtziele.

Von dem, was ich gelesen habe LinkedHashMap & TreeSet sollte beide in der Lage sein, mir zu helfen.

-Code Ich habe bisher:

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; 
} 

In der TeamDB Klasse

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? 
} 

In der GUI-Klasse

+0

Auch: https://stackoverflow.com/q/2770321/3788176. Verwenden Sie 'TreeMap '. –

+0

Bekannt. Danke für den Tipp :) –

+0

Duplikat von https://Stackoverflow.com/q/109383/3788176 –

Antwort

0

würde ich lassen Sie einfach die SQL-Datenbank auf die Sortierung, wie man ist was es gut kann.

Sie können auch keine TreeMap<String, Integer> verwenden, da diese nach Teamnamen anstelle von Zielen iterieren würde. Und Sie können TreeMap<Integer, String> entweder nicht verwenden, weil es keine Duplikate erlaubt, so dass Sie nicht in der Lage sind, zwei Teams mit den gleichen erzielten Toren zu haben. Stattdessen würde ich eine Liste verwenden. Etwas wie das folgende (aber denken Sie daran, Ihre Ressourcen richtig zu schließen, die ich aus Gründen der Klarheit weggelassen habe).

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; 
} 
Verwandte Themen