Java SonarQube问题:方法可能无法清除已检查异常的流或资源

Java SonarQube问题:方法可能无法清除已检查异常的流或资源,java,eclipse,sonarqube,Java,Eclipse,Sonarqube,我代码中的以下语句被SonarQube标记为一个关键问题。 stmt=conn.createStatement() 确切的问题是,“方法可能无法清除选中异常的java.sql.Statement” 下面的代码片段: . . . try{ . . . **stmt=conn.createStatement();** . . . } catch (SQLException e) { ...exception logged... }

我代码中的以下语句被SonarQube标记为一个关键问题。 stmt=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块来确保在该方法返回之前清除该流或资源。 这个bug模式本质上与OS_OPEN_STREAM和ODR_OPEN_DATABASE_RESOURCE bug模式相同,但基于不同(希望更好)的静态分析技术。有关分析技术的描述,请参阅Weimer和Necula,查找和防止运行时错误处理错误。 findbugs:OBL\u未满足的义务\u异常\u边缘Sep12可靠性>异常处理

我已经关闭了所有连接、语句和结果集。
这里可能有什么问题?

从这条消息中,方法可能无法清除选中异常的java.sql.Statement,我怀疑您是特定异常,如NPE或SqlException。尝试捕获整个异常,并尝试它是否有效。参考如下

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...              }
}

您使用的是哪个版本的Java?如果是Java 7,请尝试感谢@VinodJayachandran您能为Java 6提供一些建议吗?再次感谢@VinodJayachandran,但这也不起作用。