【问题标题】:Iterating through an array populated from a MySQL table遍历从 MySQL 表填充的数组
【发布时间】:2014-02-19 17:15:54
【问题描述】:

涉及到相当多的代码,我不确定要详细说明多少,但我正在使用 mysql 表中的数据填充树形图,但在迭代它时遇到了麻烦。

这是包含树形图的类的代码

public class SeasonResults{

private static Map<String,SeasonResults> allResults = new TreeMap<String,SeasonResults>(); 
private String hometeam;
private String awayteam;
private String result;                                          

private static SeasonResults result6;

public static SeasonResults add(String hometeam, String awayteam, String result) 
{
        result6 = new SeasonResults(hometeam, awayteam, result);
        allResults.put(hometeam,result6);

    return result6;
}


private  SeasonResults(String hometeam, String awayteam, String result) 
{
    this.hometeam = hometeam;
    this.awayteam = awayteam;
    this.result = result;
}

public static Collection<SeasonResults> getCollection() 
{
    return allResults.values();
}

@Override
public String toString() 
{ 
    return " "+hometeam+", "+awayteam+", "+result; 
}

}

这是我填充数组然后尝试迭代它的代码。

public void HeadToHead(){
    try 
    {
        //Sets up the connedtion to the database and installs drivers which are required.
        Class.forName("com.mysql.jdbc.Driver");                                                                        
        con = DriverManager.getConnection("jdbc:mysql://localhost", "username", "password");        

        String SQL = "SELECT * FROM PreviousSeasons WHERE HomeTeam=? and AwayTeam=?";
        PreparedStatement prepst;            

        prepst =  con.prepareStatement(SQL);
        prepst.setString(1,box1.getSelectedItem().toString());
        prepst.setString(2,box2.getSelectedItem().toString());
        rs = prepst.executeQuery();

        while (rs.next()) 
        {
            //This retrieves each row of League table and adds it to an array in the League Results class.

            hometeam = rs.getString("HomeTeam");
            awayteam = rs.getString("AwayTeam");                    
            result = rs.getString("Result");                    

            custs = (hometeam + "," + awayteam + "," + result);     // Takes all the variables containging a single customers information and puts it into a string, seperated by commas.
            SeasonResults.add(hometeam, awayteam, result);
        }
    }
    catch (Exception e) 
    {
        System.out.println("Error " +e);                                                                               
    }

    Seasonrecord = SeasonResults.getCollection();
    seasons = new SeasonResults[Seasonrecord.size()];
    Iterator iterateSeason = Seasonrecord.iterator(); 
    int i = 0;

    while(iterateSeason.hasNext()){
        seasons[i] = (SeasonResults)iterateSeason.next(); 
        i++;

        if(result.equals("HW")){
            hometeamvalue = hometeamvalue + 50;
        }  
        else if(result.equals("D")){
            hometeamvalue = hometeamvalue + 10;
            awayteamvalue = awayteamvalue + 10;
        }
        else{
            if(result.equals("AW")){
                awayteamvalue = awayteamvalue + 50;
            }
        }
    }
}

数据库中有 5 个“结果”字段。 2 是“HW”,2 是“AW”,1 是“D”。我要做的是打印出'hometeamvalue'和'awayteamvalue',但是当我这样做时,值仅打印为10。仅使用第一个字段的值。

当我想在 GUI 中显示结果时,我使用相同的代码遍历数组,并显示所有字段。但是当我尝试对它们进行一些计算时,它不起作用。

任何想法是什么问题?

【问题讨论】:

  • if(result.equals("HW")) 在此语句中将结果替换为 seasons[i].getResult().equals("HW") 并且在剩余的两个 if 语句中也执行同样的..并尝试
  • 试过了,还是不行。我不认为这部分是问题所在,因为它适用于数组中的第一项,但它并没有更进一步得到其他项。
  • 它会起作用,但您还需要更改您的 Serachesults 代码..您可以完全发布 SeasonResults.java 以及为什么您将私有静态 Map allResults 放在同一个类中...
  • 你有解决方案吗??
  • 不。我尝试使用 for 循环而不是“while”,但它仍然得到相同的答案。它只得到第一个结果。

标签: java mysql arrays treemap


【解决方案1】:

你必须这样做

SeasonResults.java

public class SeasonResults{
private String hometeam;
private String awayteam;
private String result;                                          

public String getHometeam() {
    return hometeam;
}
public void setHometeam(String hometeam) {
    this.hometeam = hometeam;
}
public String getAwayteam() {
    return awayteam;
}
public void setAwayteam(String awayteam) {
    this.awayteam = awayteam;
}
public String getResult() {
    return result;
}
public void setResult(String result) {
    this.result = result;
}

public  SeasonResults(String hometeam, String awayteam, String result) 
{
    this.hometeam = hometeam;
    this.awayteam = awayteam;
    this.result = result;
}
@Override
public String toString() 
{ 
    return " "+hometeam+", "+awayteam+", "+result; 
}

}

HeadToHaed方法

public void HeadToHead(){
        String hometeam,awayteam,result;
        int hometeamvalue,awayteamvalue;
          List<SeasonResults> allResults = new ArrayList<SeasonResults>();

        try 
        {
            //Sets up the connedtion to the database and installs drivers which are required.
            Class.forName("com.mysql.jdbc.Driver");                                                                        
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost", "username", "password");        

            String SQL = "SELECT * FROM PreviousSeasons WHERE HomeTeam=? and AwayTeam=?";
            PreparedStatement prepst;            

             prepst =  con.prepareStatement(SQL);
            prepst.setString(1,box1.getSelectedItem().toString());
            prepst.setString(2,box2.getSelectedItem().toString());
            ResultSet rs = prepst.executeQuery();

            SeasonResults seasonResults=null;
            while (rs.next()) 
            {

                //This retrieves each row of League table and adds it to an array in the League Results class.

                hometeam = rs.getString("HomeTeam");
                awayteam = rs.getString("AwayTeam");                    
                result = rs.getString("Result");                    

                seasonResults=new  SeasonResults( hometeam,  awayteam,  result) ;
                custs = (hometeam + "," + awayteam + "," + result);     // Takes all the variables containging a single customers information and puts it into a string, seperated by commas.
                allResults.add(seasonResults);
            }
        }
        catch (Exception e) 
        {
            System.out.println("Error " +e);                                                                               
        }

        System.out.println("SIze of ArrayList::"+allResults.size());
        for(SeasonResults temp:allResults)
        {
               if(temp.getResult().equals("HW")){
                    hometeamvalue = hometeamvalue + 50;
                }  
                else if(temp.getResult().equals("D")){
                    hometeamvalue = hometeamvalue + 10;
                    awayteamvalue = awayteamvalue + 10;
                }
                else{
                    if(temp.getResult().equals("AW")){
                        awayteamvalue = awayteamvalue + 50;
                    }
                }

        }

    }

如果您遇到任何问题,请告诉我

【讨论】:

  • 它有效。非常感谢,上周这对我来说一直是个问题。
猜你喜欢
  • 1970-01-01
  • 2023-04-04
  • 2014-09-02
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
相关资源
最近更新 更多