2017-12-28 8 views
2

더비 데이터베이스에서 키 값 쌍으로 리그 테이블을 만들려고합니다. 데이터베이스의 행에는 TeamName & 목표 두 개의 열만 있습니다.데이터베이스에서 정렬 된 키 값 쌍을 반환 - Java

리그 테이블의 JLabels로 & 키를 설정할 수 있도록이 값을 내 GUI 클래스에 가져와야합니다. 전체 목표 측면에서 하향식 순서로 내려갔습니다.

내가 읽은 것 LinkedHashMap & TreeSet이 나를 도와 줄 수 있어야합니다.

코드 지금까지이 다음 TeamDB 클래스는 GUI 클래스에서

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

에서

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

+0

또한 : https://stackoverflow.com/q/2770321/3788176. 'TreeMap '를 사용하십시오. –

+0

Noted. 팁 주셔서 감사 : –

+0

중복의 https://stackoverflow.com/q/109383/3788176 –

답변

0

그 하나의 나는 단지 정렬에 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; 
}