如果ResultSet取值并存入内存,为啥ResultSet对象关闭后就不能使用了?
Posted
技术标签:
【中文标题】如果ResultSet取值并存入内存,为啥ResultSet对象关闭后就不能使用了?【英文标题】:If the ResultSet fetches and stores the value in memory, why ResultSet objects cannot be used after closing it?如果ResultSet取值并存入内存,为什么ResultSet对象关闭后就不能使用了? 【发布时间】:2019-03-08 09:12:18 【问题描述】:我是 JDBC 新手,我正在使用 mysql JDBC 驱动程序,但我不明白结果集是如何工作的。
The JDBC API Implementation notes说
默认情况下,ResultSet 被完全检索并存储在内存中。在大多数情况下,这是最有效的操作方式,并且由于 MySQL 网络协议的设计,更容易实现。
如果结果集对象获取数据并存储在内存中,那么为什么关闭它后仍然无法访问该对象,因为它仍在内存中?
调用 close() 方法会切断对数据的引用吗?如果有怎么做?
帮帮我。
【问题讨论】:
【参考方案1】:如果结果集对象获取数据并存储在内存中,那么为什么关闭它后仍然无法访问该对象,因为它仍在内存中?
因为这就是 JDBC API specification 所说的应该发生的事情:
"
void close() throws SQLException
立即释放此 ResultSet 对象的数据库和 JDBC 资源,而不是等待它自动关闭时发生。"
调用 close() 方法会切断对数据的引用吗?
实际上是的。
如果有,怎么做?
看了一眼,感觉很复杂。如果您真的想知道,请阅读源代码。它在 GitHub 上:
https://github.com/mysql/mysql-connector-j....我不明白结果集是如何工作的。
您无需需要了解这一点即可使用 JDBC。您只需要了解应该如何使用 ResultSet
... 和相关类。 JDBC javadocs 解释了。
【讨论】:
以上是关于如果ResultSet取值并存入内存,为啥ResultSet对象关闭后就不能使用了?的主要内容,如果未能解决你的问题,请参考以下文章