将新的 Java 结果集对象分配给现有对象,然后关闭原始结果集对象会导致关闭新创建的结果集对象



All,

对于一个名为 Analyze 的类及其构造函数 Analyze,它将 Java JDBC Resultset 对象作为参数。

private Resultset analysisSet
public void Analyse(ResultSet queryResults)
{
    analysisSet = queryResults;
    queryResults.close();
}
public void doSomeStuff()
{
    analysisSet.next() //throws SQL Exception "Closed Resultset : next"
}

但是,如果我注释掉"queryResults.close()"语句,那么它就可以正常工作吗?

当然,在我分配一个对象等于另一个对象之后,它们彼此相互排斥?

如果有人能解释这里发生的事情。

Java 中的对象赋值是通过引用而不是按值分配的。在简单的情况下

int [] a = new int[] { 17 };
int [] b = a;
b[0] = 11;
// a[0] is 11 now.

结果集也是如此。当您只是将其分配给新变量时,您不会克隆它。它只是对同一对象的不同引用。

ResultSet 不容易克隆,通常,将其保持打开状态一段时间不是分配给对象字段的最佳做法。最好将数据复制到您自己的数据结构中,并尽快关闭结果集。

这两个引用指向同一个结果集对象。

当您关闭一个时,您也会关闭另一个。
最好说,当您调用其中一个引用时,
这将关闭结果集对象。所以另一个参考是指向
到同一(现已关闭)结果集对象。

这正在这里发生。

在Java中,你正在处理引用。我总是认为它们有点像指针,所以在你的代码中,当你这样做时analysisSet = queryResults;你不是在复制对象,你只是在添加另一个对它的引用。因此,您有一个结果集,其中包含 2 个对它的引用。如果关闭此结果集(使用其中一个引用),则在两者访问时将关闭该结果集。

相关内容

  • 没有找到相关文章

最新更新