Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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 Resultset对象分配给现有对象,然后关闭原始Resultset对象会导致关闭新创建的Resultset对象吗?_Java_Object_Jdbc_Resultset - Fatal编程技术网

将新的Java Resultset对象分配给现有对象,然后关闭原始Resultset对象会导致关闭新创建的Resultset对象吗?

将新的Java Resultset对象分配给现有对象,然后关闭原始Resultset对象会导致关闭新创建的Resultset对象吗?,java,object,jdbc,resultset,Java,Object,Jdbc,Resultset,全部, 对于名为analysis及其构造函数analysis的类,该类将Java JDBC Resultset对象作为参数 private Resultset analysisSet public void Analyse(ResultSet queryResults) { analysisSet = queryResults; queryResults.close(); } public void doSomeStuff() { analysisSet.next()

全部,

对于名为analysis及其构造函数analysis的类,该类将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()”语句,那么它可以正常工作吗

当然,当我把一个物体和另一个物体相等后,它们就会互相排斥了


如果有人能解释这里发生了什么。

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

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


这在这里发生。

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

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


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

int [] a = new int[] { 17 };
int [] b = a;

b[0] = 11;
// a[0] is 11 now.
结果集也是如此。当您只是将其分配给新变量时,您不会克隆它。它只是对同一对象的不同引用


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

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

int [] a = new int[] { 17 };
int [] b = a;

b[0] = 11;
// a[0] is 11 now.
结果集也是如此。当您只是将其分配给新变量时,您不会克隆它。它只是对同一对象的不同引用


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

在Java中,您正在处理引用。我总是认为它们有点像指针,所以在代码中执行
analysisSet=queryResults您没有复制对象,只是向其添加了另一个引用。因此,您有一个结果集,其中有两个引用。如果您关闭此结果集(使用其中一个引用),则当两者都访问时,它将关闭。

在Java中,您正在处理引用。我总是认为它们有点像指针,所以在代码中执行
analysisSet=queryResults您没有复制对象,只是向其添加了另一个引用。因此,您有一个结果集,其中有两个引用。如果你关闭这个结果集(使用一个引用),那么在两个都被访问时关闭它。

在C++中,我可以完成一个完整的任务,而不是引用它,我如何复制一个拷贝。你可以查看只复制所有字段的保护性克隆方法(很像C结构赋值)。但这并不是一个很好的使用方法。不要复制它,一旦你使用完它,调用first()来重置它。这是一个奇怪的用例。为什么你需要两个引用到相同的结果集?在C++中,我可以完成一个完整的任务,就像它没有引用一样,我如何复制一个拷贝。你可以查看只复制所有字段的保护性克隆()方法,非常类似于C结构赋值。但这并不是一个很好的使用方法。不要复制它,一旦你使用完它,调用first()来重置它。这是一个奇怪的用例。为什么需要对同一结果集进行两次引用?