狡猾 - 已知为null的冗余nullcheck值

时间:2015-09-23 11:33:02

标签: java sonarqube code-analysis findbugs

以下是我收到声纳违规行为的代码

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值。请建议我如何在不删除空检查的情况下避免此违规行为。

2 个答案:

答案 0 :(得分:2)

因为无论哪种方式,如果您最终都在catchconnection将始终为空。有几个地方你可以有一个例外,但在你分配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参数未使用。