我无法弄清楚当他们去搜索标题时如何告诉用户“没有找到这样的标题”。当我测试它并从数据库中键入标题时,它会显示正确的信息:
Game Id: 2
Title: Goldeneye 007
Rating: T
Platform: Nintendo 64
Developer: RockStar
但如果我输入随机信息,输出如下:
Game Id: 0
Title: asdsdfdfg
Rating: null
Platform: null
Developer: null
我在mysql中使用java的基本控制台应用程序我有两层。 我的表示层:
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 :(得分: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;
答案 1 :(得分:0)
你可以通过多种方式做到这一点,在这里解释一下。
在SearchGame方法中,使用isBeforeFirst()方法检查您是否有任何数据。
if(!resultSet.isBeforeFirst()){
return null;
}
如果对象为空,则在SearchForGame()
中显示消息。
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");
}
答案 2 :(得分: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;
}
但更好的方法是返回一个Game实例列表,然后检查该列表是否为空,如下所示。
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");
}
如果您愿意,这也可以让您找到具有相似标题的多个游戏。