这段代码中是否有资源(预备语句)泄漏?

时间:2017-01-23 21:47:15

标签: java memory-leaks prepared-statement

PreparedStatement ps = null;
ResultSet rs = null;
try {
    ps = getConnection().prepareStatement(sql);
    if (ps != null) {
        ps = doSomething(ps);
        ps.executeUpdate();
    }
} finally {
    if (ps!=null) {
        ps.close();
    }
}

private PreparedStatement doSomething(PreparedStatement ps) {
    ps.setString(1, "test");
}

"执行更新只调用一次"。字符串" sql"在不同条件下是不同的并且将具有不同数量的绑定变量,方法doSomething在子类中具有用于设置绑定变量的不同实现。

Eclipse因为重新分配准备好的语句而抱怨这是一个潜在的泄漏。这里有资源泄漏吗?

1 个答案:

答案 0 :(得分:-1)

在行中:

ps = doSomething(ps);

ps 的原始值可能会被删除,具体取决于它是否由doSomething保留。

无论如何,Java将所有内容都保存在垃圾收集器下,因此没有任何内容泄漏"内存泄漏"。称之为丢失或丢失。