SonarQube问题:方法可能无法清除已检查异常

时间:2017-03-29 10:48:49

标签: java eclipse sonarqube

我的代码中的以下陈述被SonarQube红色标记为一个关键问题。     语句= conn.createStatement();

确切的问题是,“方法可能无法在已检查的异常上清除java.sql.Statement”。

以下代码段:

.
.
.
try{
    .
    .
    .

    **stmt=conn.createStatement();**

    .
    .
    .
} catch (SQLException e) {
    ...exception logged... 
} catch (NullPointerException e) {
    ...exception logged...
}finally{

    try {
            if(rs !=  null)
            {
                    rs.close();
            }
        } catch (SQLException e) {
        ...exception logged...
    }

    if(stmt !=  null)
    {
        try {
            stmt.close();
        } catch (SQLException e) {

            ...exception logged...
        }catch (NullPointerException e) {
            ...exception logged...
        }
    }

    if(conn !=  null)
    {
        try {
            conn.close();
        } catch (SQLException e) {
            ...exception logged...              }
    }

}
.
.
.

SonarQube显示的规则如下:

方法可能无法清除已检查异常的流或资源 此方法可能无法清除(关闭,处置)流,数据库对象或需要显式清除操作的其他资源。 通常,如果方法打开流或其他资源,则该方法应使用try / finally块以确保在方法返回之前清除流或资源。 此错误模式与OS_OPEN_STREAM和ODR_OPEN_DATABASE_RESOURCE错误模式基本相同,但基于不同的(并且希望更好)静态分析技术。有关分析技术的描述,请参阅Weimer和Necula,查找和防止运行时错误处理错误。 。 findbugs:OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE Sep12可靠性>异常处理

我已关闭所有连接,语句和结果集。 这可能是什么问题?

1 个答案:

答案 0 :(得分:0)

从这条消息方法可能无法清除已检查异常的java.sql.Statement ,我怀疑你是NPE或SqlException之类的特定异常。尝试将Exception作为一个整体捕获并尝试它是否有效。参考如下。

try {
        if(rs !=  null)
        {
                rs.close();
        }
    } catch (Exception e) {
    ...exception logged...
}

if(stmt !=  null)
{
    try {
        stmt.close();
    } catch (Exception e) {

        ...exception logged...
    }
}

if(conn !=  null)
{
    try {
        conn.close();
    } catch (Exception e) {
        ...exception logged...              }
}