2013-10-26 90 views
0

错误的值我无法弄清楚如何告诉用户有当他们去寻找一个标题为“没有发现这样的标题”。当我测试它,并键入从数据库中标题它显示了正确的信息:试图告诉用户他们进入在Java

Game Id: 2 
Title:  Goldeneye 007 
Rating: T 
Platform: Nintendo 64 
Developer: RockStar 

,但如果我在随机信息输入输出看起来是这样的:

Game Id: 0 
Title:  asdsdfdfg 
Rating: null 
Platform: null 
Developer: null 

我使用的是基本控制台应用程序在Java与MySQL我有两个层次。 我表示层:

private static Games SearchForGame() { 
     Logic aref = new Logic(); 
     Games g = new Games(); 
     @SuppressWarnings("resource") 
     Scanner scanline = new Scanner(System.in); 
     System.out.println("Please enter the name of the game you wish to find:"); 
     g.setTitle(scanline.nextLine()); 
     aref.SearchGame(g); 

      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()); 

     return g; 


    } 

和逻辑层

public Games SearchGame(Games g) { 

     try { 
      Class.forName(driver).newInstance(); 
      Connection conn = DriverManager.getConnection(url+dbName,userName,password); 
      String sql = "SELECT GameId,Title,Rating,Platform,Developer FROM games WHERE Title=?"; 
      java.sql.PreparedStatement statement = conn.prepareStatement(sql); 
      statement.setString(1, g.getTitle()); 
      ResultSet rs = statement.executeQuery(); 

      while(rs.next()){ 

      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")); 
      } 
      } catch (Exception e) { 
      e.printStackTrace(); 
      } 
      return g; 
    } 

回答

0

使用的if声明?

if(g.getRating() != null /*or g.getGameId() == 0 or many other things*/) { 
    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()); 
} else { 
    System.out.println(); 
    System.out.println("No such title found"); 
    //throw some sort of exception (and plan to catch it) so that you 
    //can get out of this method without returning g full of null values 
} 

return g; 
0

你可以用很多方式做到这一点,这里将解释一个。

在SearchGame方法使用isBeforeFirst()方法来检查,如果您有任何数据。

if(!resultSet.isBeforeFirst()){ 
    return null; 
} 

而在你的SearchForGame()如果对象为null,则显示一条消息。

if(g != null) { 
    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()); 
} else { 
    System.out.println("No data found"); 
} 
0

检查空值是一种不良的流量控制形式。您应该考虑布尔结果。

if(aref.SearchGame(g)) { 
    System.out.println(); 
    System.out.println("Game Id: " + g.getGameId()); 
    . . . 
else { 
    System.out.println("No such title found"); 
} 

然后在你的逻辑,只是这样做:

public boolean SearchGame(Games g) { 

    boolean found = false; 
    try { 

    [your sql select here] 

    if (rs.next()) { 

     [access result set] 

     found = true; 
    } 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
    return found; 
} 

但更好的方法是退回到游戏的实例的列表,然后检查是否该列表是空的,像这样。

List<Game> SearchGames(String title) 

这是一个良好的坚实的API,你可以使用它像这样:

List<Game> games = aref.SearchGames(title); 
if(games.size() > 0) { 
    Game g = games.get(0);  
    System.out.println(); 
    System.out.println("Game Id: " + g.getGameId()); 
    . . . 
else { 
    System.out.println("No such title found"); 
} 

这也可以让你找到你想要的类似标题的多个游戏。

相关问题