4

我不知道为什么eclipse在我的这段代码中警告我“死代码”:

    PreparedStatement p = conn.prepareStatement("SELECT name FROM user WHERE age = ? , city = ?");
    p.setInt(1, (String) parameters.get("age"));
    p.setString(2, (String) parameters.get("city"));

    if (p == null) {
        log.warn("User is not available");
        return results;
    }

警告在日志中,有人可以告诉我这是什么原因吗?谢谢你。

4

3 回答 3

9

p不能null在那个时候,仅仅因为你已经调用过setInt并且如果它在那里,那么它会抛出一个,因此永远不会到达你的.setStringpnullNullPointerExceptionif

另请注意,根据其文档preparedStatement永远无法返回null。它只能返回有效语句或抛出异常。在后一种情况下,您if也不会被联系到然而,编译器不会检查这一事实(因为理论上可能return的错误实现)。prepareStatement null

于 2012-07-03T06:18:41.953 回答
0

You need to do that null check before you call any method on p. If p is null, it will never reach that line.

于 2012-07-03T06:24:02.647 回答
-1

如果pnull则在第二行本身将抛出“NullPointerException”。

更改如下代码

PreparedStatement p = conn.prepareStatement("SELECT name FROM user WHERE age = ? , city = ?");
if(p != null){
    p.setInt(1, (String) parameters.get("age"));
    p.setString(2, (String) parameters.get("city"));
}else{
    log.warn("User is not available");
    return results;
}

if loop或使用前带上p

PreparedStatement p = conn.prepareStatement("SELECT name FROM user WHERE age = ? , city = ?");
if (p == null) {
    log.warn("User is not available");
    return results;
}
p.setInt(1, (String) parameters.get("age"));
p.setString(2, (String) parameters.get("city"));
于 2012-07-03T06:20:54.733 回答