以下是我收到声纳违规行为的代码
public static Connection getConnection(
String db)
throws SQLException {
Connection connection = null;
try {
Driver dbRriver = (Driver) Class.forName(driver).newInstance();
Properties props = new Properties();
props.put("user", PropertyLoader.get("user123"));
props.put("password", PropertyLoader.get("pass"));
connection = dbRriver
.connect(PropertyLoader.get("URL"), props);
} catch (Exception e) {
**if(connection!= null){
connection.close();**
}
LOGGER.error(IN_EXCEPTION, e);
}
return connection;
}
在关闭之前需要检查连接是否为空条件,但是声纳正在给出违规行为" Dodgy - 已知为null"的冗余nullcheck值。请建议我如何在不删除空检查的情况下避免此违规行为。
答案 0 :(得分:2)
因为无论哪种方式,如果您最终都在catch
,connection
将始终为空。有几个地方你可以有一个例外,但在你分配connection = dbRriver.connect(PropertyLoader.get("URL"), props);
之前它们都是
所以它在catch
中始终为空。
是的,您需要将此代码放在finally
中,如@Stultuske建议
答案 1 :(得分:2)
正如已经提到的那样,你不能在EXISTS
子句中使用非null SELECT n.* FROM Names n
WHERE n.flag = 1
AND EXISTS
(
SELECT 1 FROM Names n2
WHERE n.id = n2.id
AND n.name = n2.name
AND n2.flag = 0
)
。似乎这项检查绝对是多余的,您可以将其删除。
另请注意,您的方法被声明为throw catch (Exception ex)
,但它实际上从未被抛出。在Exception的情况下,调用者将收到connection
值。似乎是不好的做法:调用者应该对此SQLException
做什么?我认为整个尝试都没用。只是让异常传播给调用者。好吧,您可以离开null
块,但将原来的null
换成catch
代替:
Exception
最后请注意,您的SQLException
参数未使用。