0

我正在为这家公司制作一个控制台应用程序,以展示我通过为期 5 周的课程所学到的知识。它是一个控制台应用程序,它使用 MySQL 数据库的 crud 操作。它是一个基本的视频游戏存储。

我有两层。呈现和逻辑。我的问题是我似乎无法让我的视图方法起作用。首先它只查看我表中的一行,然后我添加了一个 for 循环,现在它什么也不显示。

这是我的表示层:

public static void ViewAll() {

    List<Games> gamelist = new ArrayList<Games>();
    Logic aref = new Logic();
    aref.ViewAllGames();
    for(Games g : gamelist){
        System.out.println();
        System.out.println("Game Id:   " + g.getGameId());
        System.out.println("Title:     " + g.getTitle());
        System.out.println("Rating:    " + g.getRating());
        System.out.println("Platform:  "+ g.getPlatform());
        System.out.println("Developer: "+ g.getDeveloper());
    }
}

这是我的逻辑层:

public static List<Games> ViewAllGames() {
    List<Games> game = new ArrayList<Games>();
    try {
        Class.forName(driver).newInstance();
        Connection conn = DriverManager.getConnection(url+dbName,userName,password);
        Statement statement = conn.createStatement();
        ResultSet rs = statement.executeQuery("SELECT * FROM games");
        while(rs.next()){
            Games g = new Games();
            for(Games gamelist : game){
                g.setGameId(rs.getInt("GameId"));
                g.setTitle(rs.getString("Title"));
                g.setRating(rs.getString("Rating"));
                g.setPlatform(rs.getString("Platform"));
                g.setDeveloper(rs.getString("Developer"));
                game.add(g);
            }
        }
    } catch (Exception e) {
         e.printStackTrace();
    }
    return game;

}

任何帮助将不胜感激,并提前致谢。


编辑:所以我让它打印多行,现在它打印最后一行。结果如下:

游戏 ID:10 标题:Goldeneye 007 评级:M 平台:Nintendo 64 开发商:RockStar

游戏 ID:10 标题:Goldeneye 007 评级:M 平台:Nintendo 64 开发商:RockStar

游戏 ID:10 标题:Goldeneye 007 评级:M 平台:Nintendo 64 开发商:RockStar

游戏 ID:10 标题:Goldeneye 007 评级:M 平台:Nintendo 64 开发商:RockStar

游戏 ID:10 标题:Goldeneye 007 评级:M 平台:Nintendo 64 开发商:RockStar

4

2 回答 2

0

解决了!结果是我将 GameId、Title、Rating、Platform 和 Developer 全部设为静态而不是公开的。对不起,如果我浪费了任何人的时间!:)

于 2013-10-25T19:39:30.583 回答
0

aref.ViewAllGames()返回游戏列表,但您没有对它做任何事情。因此for,循环在一个空列表上循环。尝试这个:

public static void ViewAll() {

    Logic aref = new Logic();
    List<Games> gamelist = aref.ViewAllGames();
    for(Games g : gamelist){
        System.out.println();
        System.out.println("Game Id:   " + g.getGameId());
        System.out.println("Title:     " + g.getTitle());
        System.out.println("Rating:    " + g.getRating());
        System.out.println("Platform:  "+ g.getPlatform());
        System.out.println("Developer: "+ g.getDeveloper());
    }
}

回应您的编辑:

for循环ViewAllGames()不属于那里。你应该只迭代你正在做的结果集,但只需在每次迭代时将一个新游戏添加到列表中:

while(rs.next()){
    Games g = new Games();
    g.setGameId(rs.getInt("GameId"));
    g.setTitle(rs.getString("Title"));
    g.setRating(rs.getString("Rating"));
    g.setPlatform(rs.getString("Platform"));
    g.setDeveloper(rs.getString("Developer"));
    game.add(g);
}
于 2013-10-24T16:56:20.890 回答