java - 将新的 Java Resultset 对象分配给现有的结果集对象,然后关闭原始的 ResultSet 对象会导致新创建的结果集对象被关闭吗?

标签 java object jdbc resultset

全部,

对于名为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/

相关文章:

javascript - 在不同数据选项之间循环迭代对象

JavaScript - 获取父对象

java - JDBC 代码是否与单一数据库类型相关?

java - 如何在Postgresql JDBC中的PreparedStatement中添加参数而无需手动设置类型

java - 吗啡聚合不同的映射键

javascript - 如何通过关键字删除 json 数组中的所有对象

java - 在java中将列表存储到文件中一段时间

java - 如何将我的数据库名称指定到 JDBC -> MySQL 连接中?

java - 仅带有 websocket 客户端的 Spring Boot 应用程序

java - 将 HTML 项目符号转换为纯文本