【问题标题】:SonarQube issue: Method may fail to clean up stream or resource on checked exceptionSonarQube 问题:方法可能无法在检查异常时清理流或资源
【发布时间】:2017-08-22 19:35:22
【问题描述】:

SonarQube 将我代码中的以下语句标记为严重问题。 stmt=conn.createStatement();

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

下面的代码sn-p:

.
.
.
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 可靠性 > 异常处理

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

【问题讨论】:

标签: java eclipse sonarqube


【解决方案1】:

从此消息方法可能无法清理已检查异常时的 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...              }
}

【讨论】:

  • 再次感谢@VinodJayachandran,但这也行不通。
猜你喜欢
  • 2014-07-20
  • 1970-01-01
  • 2018-12-21
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 2013-11-09
  • 2016-07-15
相关资源
最近更新 更多