全部,
对于名为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 - 将新的 Java Resultset 对象分配给现有的结果集对象,然后关闭原始的 ResultSet 对象会导致新创建的结果集对象被关闭吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21673440/