当前位置: 首页 > 知识库问答 >
问题:

SonarQube问题:方法可能无法清除选中异常的流或资源

邬安邦
2023-03-14

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

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

下面是代码片段:

.
.
.
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/last块来确保在方法返回之前清理流或资源。此错误模式本质上与OS_OPEN_STREAM和ODR_OPEN_DATABASE_RESOURCE错误模式相同,但基于不同的(希望更好)静态分析技术。有关分析技术的描述,请参阅Wemer和Necula,查找和防止运行时错误处理错误。. findbugs:OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGESep12可靠性

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

共有1个答案

连文栋
2023-03-14

从这个消息来看,方法可能无法清理java。sql。关于checked异常的声明,我怀疑你是特定的异常,比如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...              }
}
 类似资料:
  • 它显示了这个特定声明的问题。你能帮帮我吗?

  • 我正在使用Spring JDBCTemboard访问数据库中的数据,它工作正常。但是FindBugs在我的代码片段中指出了一个小问题。 代码: FindBugs问题: 方法可能无法清理流或资源的检查异常在这一行 有人能告诉我这到底是什么吗?我们如何解决这个问题? 我们将不胜感激:)

  • 我正试图修改PySpark dataframe中的列值,如下所示: 这将生成以下异常: 调用O435时出错。跟踪:py4j.py4jException:Method或([class java.lang.string])在py4j.reflection.reflectionEngine.getMethod(reflectionEngine.java:318)在py4j.reflection.refl

  • 我知道这是一个很常见的问题。但是,有一个微小的区别,我的WPF安装完美,并运行在Windows7和Windows8操作系统上。但是,当试图在运行Windows XP的VM上安装时,会出现以下错误: 无法继续。应用程序的格式不正确。详情: 组件存储事务处理详细信息 没有可用的交易信息。 我用有效密钥重新签名了应用程序 我已在多台PC上安装,安装和工作都很好。

  • 本文向大家介绍Android清除工程中无用资源文件的两种方法,包括了Android清除工程中无用资源文件的两种方法的使用技巧和注意事项,需要的朋友参考一下 一、调用Android lint命令查找出没有用到的资源,并生成一个清单列表: 命令:lint –check “UnusedResources” [project_path] > result.txt 执行完之后会生成一个清单文件,内容如下:

  • 我正在使用FileWrite类写入文件。而且效果很好。但是FindBugs在我的代码片段中指出了一个小问题。 代码片段: Findbug报告: OBL_未满足_义务:方法可能无法清理流,或者资源WriteDataFile(字符串)可能无法清理java。伊奥。已检查异常的写入程序 我在哪一行遇到这个错误? 有人能告诉我这到底是什么吗?我们如何解决这个问题?