如果ResultSet取值并将其存储在内存中,为什么在关闭ResultSet对象后不能使用它?

时间:2018-10-03 07:31:23

标签: java mysql jdbc resultset

我是JDBC的新手,我正在使用mysql JDBC Driver,但我不了解结果集的工作原理。

The JDBC API Implementation notes

  

默认情况下,完全检索ResultSet并将其存储在内存中。在大多数情况下,这是最有效的操作方式,并且由于MySQL网络协议的设计,因此更易于实现。

如果结果集对象获取数据并将其存储在内存中,那么为什么关闭该对象后仍无法访问该对象,因为它仍在内存中?

调用close()方法会削减对数据的引用吗?如果可以,怎么办?

帮帮我。

1 个答案:

答案 0 :(得分:6)

  

如果结果集对象获取数据并将其存储在内存中,那么为什么关闭该对象后仍无法访问该对象,因为它仍在内存中?

因为这应该是JDBC API specification所说的:

  

void close() throws SQLException

     

立即释放此ResultSet对象的数据库和JDBC资源,而不是等待它自动关闭时发生。”


  

调用close()方法会削减对数据的引用吗?

有效。


  

如果可以,怎么办?

简要介绍一下,它很复杂。如果您真的想知道,请阅读源代码。在GitHub上:


  

...。我不了解结果集的工作原理。

不需要了解使用JDBC。您只需要了解应该如何使用ResultSet ...和相关类。 JDBC javadocs解释了那个