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

资源泄漏:无法在此位置关闭“PS”[重复]

靳彦
2023-03-14

看看这个简单的数据库查询方法,它给我发出警告资源泄漏:'ps'可能没有在返回行中的这个位置关闭..

public Bancos getDefault() {
    Debug.out("");

    PreparedStatement ps = null;
    Bancos banco = null;

    try {

        String query = "SELECT * FROM " + TABLE_BANCOS + " " +
                       "WHERE " + FIELD_KEY + " = ?;";

        ps = connector.prepareStatement(query);
        ps.setString(1, new ParametrosManager().getParametros().getCodigoBanco());

        ResultSet rs = ps.executeQuery();
        if(rs.next()) {
            banco = new Bancos(
                    rs.getString(FIELD_KEY),
                    rs.getDate(FIELD_DATAREGISTO),
                    rs.getString(FIELD_ABREVIATURA),
        }

        rs.close();
        ps.close();

    } catch(SQLException se) {
        se.printStackTrace();
    } finally {
        try {
            if(ps != null) 
                ps.close();
        } catch(SQLException se) {
            se.printStackTrace();
        }
    }

    return banco;
}

所以,固定代码:

public Bancos getDefault() {
    Debug.out("");

    Bancos banco = null;
    String query = "SELECT * FROM " + TABLE_BANCOS + " " +
                   "WHERE " + FIELD_KEY + " = ?;";

    try( PreparedStatement ps = connector.prepareStatement(query); ) {
        ps.setString(1, new ParametrosManager().getParametros().getCodigoBanco());

        ResultSet rs = ps.executeQuery();
        if(rs.next()) {
            banco = new Bancos(
                    rs.getString(FIELD_KEY),
                    rs.getDate(FIELD_DATAREGISTO),
                    rs.getString(FIELD_ABREVIATURA),
        }

        rs.close();

    } catch(SQLException se) {
        se.printStackTrace();
    }

    return banco;
}

我感谢Luiggi为我指出了答案。

共有1个答案

吴高畅
2023-03-14

您认为此警告是假阳性的假设是正确的。

在Eclipse4.5中测试代码,我没有收到任何警告。与此同时,Eclipse Java编译器中的静态分析似乎有所改进。

 类似资料:
  • 我正在编写一个程序,希望控制台输出用户输入的数字的剩余部分。但是,每次我编译代码时,控制台都会打印出来,我得到以下控制台错误: 我不确定控制台所说的“资源泄漏”是什么意思。我在几个不同的地方查找过它(包括API和其他堆栈溢出问题),我不确定为什么没有打印到控制台。我正在使用DrJava程序,以防有人想知道。 这里是我的代码供参考:

  • 我正在使用Eclipse,并执行下面的函数,碰巧我打开了一个扫描器,然后,最后我关闭了它,但Eclipse一直说它没有关闭“资源泄漏:'Scanner'没有关闭”。我可以用try with resources来完成,警告消失了,但我想知道为什么我在这里尝试的方式不起作用

  • 为什么Eclipse在下面的代码中给了我变暖的“资源泄漏:'in'从不关闭”?

  • 此代码导致资源泄漏: conin从未关闭 为什么会发生这种情况?我如何修复它?

  • 当我创建扫描仪时,似乎出现了这个错误。我试图通过搜索错误名称来解决这个问题,但到目前为止未能成功地让消息停止出现。 代码: 我得到错误的部分: