当前位置: 首页 > 面试题库 >

为什么要在ResultSet和Connection实例上调用close()?

傅正豪
2023-03-14
问题内容

当我不再需要在程序中使用那些ResultSet和Connection的实例时,为什么还要对它们都调用.close()方法呢?

不这样做有什么危险(如果有)?


问题答案:

这里有两个问题:

数据库连接

保持数据库连接打开会消耗数据库上的资源。它使用内存,并且数据库被配置为具有最大数量的连接,因此您增加了连接用尽的可能性。此外,会话的状态也得到维护,因此您可能会遇到意外锁定超出其预期范围的问题。

从积极的方面来说,准备好的语句将保持编译状态并可以使用,因此,如果您正确编码和使用SQL,则可以从重用准备好的语句中获得显着的性能收益。但是,这样做可能会使您的代码复杂化,建议您谨慎使用。

另外,获得连接非常昂贵,因此这就是存在连接池的原因。这些使连接保持打开状态,但是客户端获得连接,使用它们,然后在完成后将它们释放回池中。

结果集

保持结果集保持打开状态也可以使某些锁保持打开状态commit(先关闭结果集,然后关闭结果集),因此,根据您的应用程序,您可能会迅速遇到死锁或严重的活动问题。不管您是否保持连接打开状态,请始终尽快关闭结果集,以将尽可能多的资源释放回数据库。



 类似资料:
  • 问题内容: 让我感到困惑的一个例子: Thing.java: (相同的程序包)TestUsesThing.java: 为什么没有必要导入Date以便能够在其中之一上调用getTime()? 问题答案: 只需要用Java导入,这样,如果您键入,编译器就会知道a 是什么。 导入与在C / C ++中不同。classpath上的所有类型都 可用 ,但是您不必为了编写完全限定的名称而使用它们。在这种情况下

  • 问题内容: 我在网上研究过immutablejs的好处,但是没有发现任何令人满意的东西! 我的问题是,当我可以冻结一个普通的旧javascript对象时,为什么我应该使用该库并使用非本机数据结构? 问题答案: 我认为您不了解immutablejs提供的功能。这不是一个使您的对象变得不可变的库,而是一个使用不可变值的库。 在不简单重复他们的文档和任务说明的情况下,我将说明它提供的两件事: 类型。他们

  • 问题内容: 为什么要在上使用pip?难道不是PyPI和程序包作者最主要的原因吗?如果作者将废话源tarball(例如:丢失的文件,没有)上传到PyPI,则pip和都会失败。除了外观上的差异外,为什么Python的人(如上述推文中)似乎强烈青睐pip而不是? (假设我们正在谈论由社区维护的Distribute软件包中的) 问题答案: 这里的许多答案在2015年已经过时了(尽管丹尼尔·罗斯曼最初接受的

  • 问题内容: 我的用例需要一个数据结构。我应该能够将项目推送到数据结构中,而我只想从堆栈中检索最后一个项目。该堆栈的JavaDoc说: Deque接口及其实现提供了一组更完整和一致的LIFO堆栈操作,应优先使用此类。例如: 我绝对不希望这里出现同步行为,因为我将使用方法本地的数据结构。除了这个,我为什么还要在这里呢? PS:Deque的Javadoc说: 双端队列也可以用作LIFO(后进先出)堆栈。

  • 问题内容: 我一定会丢失一些东西,但是我已经看了几天了,但是到底为什么您会使用log4j2而不是log4j(而不是性能)? 从目前为止我所看到的,log4j2被宣传为更易于配置,但实际上却要复杂得多(现在已经三天了,我仍然无法在我的主目录中写日志)。自动配置对我根本不起作用(或者至少我无法使其工作),配置文件本身的结构实质上更复杂,在运行时添加东西以帮助诊断似乎更加困难。 因此,除了性能之外,还有

  • 问题内容: 请帮忙。将来自扫描仪的提示显示到控制台后,出现此错误: 问题是来自printf吗?我检查了格式,它看起来正确。 这是程序: 问题答案: 答:因为您的格式说明符与方法中使用的输入参数不匹配。 使用而不是将值用作格式说明符 另外需要额外的逃脱角色 最后,删除不必要的点字符 阅读:Formatter javadoc