我不知道为什么eclipse会警告我" Dead Code"在我的这段代码中:
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;
}
警告在日志中,有人可以告诉我这个原因吗?谢谢。
答案 0 :(得分:9)
p
不能null
,只是因为您已在setInt
上调用了setString
和p
,如果它是null
那里,它会抛出一个NullPointerException
,从而永远不会到达你的if
。
另请注意,根据its documentation,preparedStatement
无法返回null
。它只能返回有效语句或抛出异常。在后一种情况下,您的if
也也无法联系到。但是,这个事实是不由编译器检查(因为prepareStatement
的损坏的实现理论上可以返回{{1} })。
答案 1 :(得分:0)
在调用null
上的任何方法之前,您需要执行p
检查。如果p为null
,则它永远不会到达该行。
答案 2 :(得分:-1)
如果p
是null
,那么在第二行本身就会抛出“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"));