Java 此代码中是否存在资源(准备好的语句)泄漏?

Java 此代码中是否存在资源(准备好的语句)泄漏?,java,memory-leaks,prepared-statement,Java,Memory Leaks,Prepared Statement,“执行更新只调用一次”。字符串“sql”在不同的条件下是不同的,并且将有不同数量的绑定变量,方法doSomething在设置绑定变量的子类中有不同的实现 Eclipse抱怨这是一个潜在的泄漏,因为重新分配了prepared语句。这里有资源泄漏吗?在以下行中: PreparedStatement ps = null; ResultSet rs = null; try { ps = getConnection().prepareStatement(sql); if (ps != nu

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

Eclipse抱怨这是一个潜在的泄漏,因为重新分配了prepared语句。这里有资源泄漏吗?

在以下行中:

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");
}
ps
的原始值可能会被删除,具体取决于
doSomething
是否保留该值


无论如何,Java把所有东西都放在垃圾收集器下,所以没有什么比“内存泄漏”更糟糕的了。称之为丢弃或丢失。

您绝对可能会发生内存泄漏,例如缓存失控,Java可能会泄漏数据库连接等资源。@chrylis OK,本地人是另一回事,我的意思是,没有Sun内部构件的纯Java或本机streamsJDBC连接都是纯Java。但哪个内存不是空闲的内存泄漏是程序完成后未释放的内存。资源泄漏正在下降一个流(1)考虑使用资源尝试。(2) 为什么
doSomething
需要返回语句,而不是像本例中所示修改语句?这是因为doSomething被重写以在不同的子类中执行不同的操作。这并不能回答问题。它做了什么不能被
void
?您在哪里关闭从
getConnection()
返回的连接?不同的实现为不同风格的sql字符串设置不同数量的参数。例如,其中一个实现设置了两个参数,另一个实现设置了一个参数,等等。
ps = doSomething(ps);