需要帮助在java控制台中显示mysql表

时间:2013-10-24 16:07:53

标签: java mysql console-application crud

我正在为这家公司制作一个控制台应用程序,以显示我通过为期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 平台:任天堂64 开发者:RockStar

游戏ID:10 标题:Goldeneye 007 评级:M 平台:任天堂64 开发者:RockStar

游戏ID:10 标题:Goldeneye 007 评级:M 平台:任天堂64 开发者:RockStar

游戏ID:10 标题:Goldeneye 007 评级:M 平台:任天堂64 开发者:RockStar

游戏ID:10 标题:Goldeneye 007 评级:M 平台:任天堂64 开发者:RockStar

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

解决了!事实证明,我将GameId,Title,Rating,Platform和Developer都设为静态而非公开。对不起,如果我浪费了任何时间! :)