Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 资源泄漏:';ps&x27;可能无法在此位置关闭_Java_Jdbc - Fatal编程技术网

Java 资源泄漏:';ps&x27;可能无法在此位置关闭

Java 资源泄漏:';ps&x27;可能无法在此位置关闭,java,jdbc,Java,Jdbc,看看这个简单的数据库查询方法,它给了我一个警告资源泄漏:“ps”可能不会在返回行的这个位置关闭 public Bancos getDefault() { Debug.out(""); PreparedStatement ps = null; Bancos banco = null; try { String query = "SELECT * FROM " + TABLE_BANCOS + " " +

看看这个简单的数据库查询方法,它给了我一个警告
资源泄漏:“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;
}
我想知道为什么eclipse会给我这个警告,因为我甚至在
最后
块上关闭
ps
。这只是一个假阳性警告吗

我使用Java7

解决方案:

这似乎是Java7的一个问题,请从重复的问题中检查这一点

因此,固定代码:

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

谢谢你给我指出答案

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


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

您使用的是什么Eclipse版本?