4

なぜ日食が私のこのコードで「デッドコード」を警告するのかわかりません:

    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からといって、その時点にいることはできません。もしそれがそこにあったとしたら、それはを投げたでしょう、したがってあなたのに決して到達しません。setIntsetStringpnullNullPointerExceptionif

また、そのドキュメントによると、preparedStatement戻ることはできませんnull。有効なステートメントを返すか、例外をスローすることしかできません。後者の場合、あなたif到達しません。ただし、その事実はコンパイラによってチェックされません(の壊れた実装はprepareStatement 理論的には戻る可能性があるためnull)。

于 2012-07-03T06:18:41.953 に答える
0

nullでメソッドを呼び出す前に、そのチェックを行う必要がありますp。pがnullの場合、その行に到達することはありません。

于 2012-07-03T06:24:02.647 に答える
-1

その場合、2行目自体に`NullPointerException'がスローされますpnull

以下のようにコードを変更します

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 に答える