gpt4 book ai didi

java - 语句对象持有哪些资源

转载 作者:行者123 更新时间:2023-12-02 12:06:41 24 4
gpt4 key购买 nike

对于 JDBC 连接,我知道 Java 将创建一个带有端口号的套接字,并使用其指定的端口号、数据库名称和其他选项打开它与数据库服务器之间的连接流,关闭此资源显然是需要。

但是对于Statement以及ResultSet来说,它们所持有的资源是什么,所以我们需要关闭它们?我的意思是技术上。

最佳答案

资源是否实际上由语句或结果集持​​有,很大程度上取决于特定的数据库和驱动程序。

Java 中的 Statement 可以在数据库中拥有对应项(语句句柄),并为语句提供一些内存、超时、获取大小、缓冲区等配置。对于普通的 语句情况并非总是如此,但对于PreparedStatement,数据库中的语句句柄通常会保存已编译语句的版本及其执行计划等。

关闭 Java 中的语句对象将释放数据库中的此句柄(或者可能将其释放以供其他语句重用),并且可能会释放元数据上的“存在锁”(例如,防止表在删除时被删除)仍在使用/准备中)。此外,在 Java 中关闭该语句将关闭所有打开的结果集,从而释放 Java 和数据库中的内存。

关闭结果集本身也有明显的好处,结果集可能会保留Java中的内存(例如预取的行,有时是完整的结果),因此关闭结果集将释放那些预取的行并释放内存。如果您尚未完全阅读结果集,或者您正在使用可滚动结果集,则尤其适用。

结果集也可能在数据库端有一个游标(或类似的),它指向最后获取的行,锁定行(例如在 for update select 语句中),也许它还在内存中保存了一些预取的行。关闭结果集将释放内存和任何锁等。

换句话说:是的,您应该关闭结果集和语句,并且应该在使用完它们后立即关闭它们。

关于java - 语句对象持有哪些资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46863061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com