将新的Java Resultset对象分配给现有对象,然后关闭原始Resultset对象会导致关闭新创建的Resultset对象吗?
全部, 对于名为analysis及其构造函数analysis的类,该类将Java JDBC 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()
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()来重置它。这是一个奇怪的用例。为什么需要对同一结果集进行两次引用?