swe*_*ams 12 java connection jdbc resultset
当我不需要在我的程序中使用那些ResultSet和Connection的实例时,为什么我应该在它们上面调用.close()方法呢?
不这样做会有什么危险(如果有的话)?
Boh*_*ian 12
这里有两个问题:
保持数据库连接打开会消耗数据库上的资源; 它使用内存和数据库配置为具有最大数量的连接,因此您可能会增加连接用尽的可能性.此外,会话的状态也会得到维护,因此如果意外地将锁定超出预期范围,您可能会遇到麻烦.
从积极的方面来说,准备好的语句可以编译并可以使用,因此如果您正确编写和使用SQL,则可以通过重用预准备语句获得显着的性能优势.但是,这样做可能会使您的代码复杂化,建议您小心.
此外,获取连接非常昂贵,因此存在连接池的原因.这些连接保持打开状态,但客户端获取连接,使用它们,然后在完成后将它们释放回池中.
保持结果集打开也会保持某些锁定打开commit(关闭然后结果集),因此根据您的应用程序,您可以快速解决死锁或严重的生动问题.无论您是否保持连接打开,请始终尽快关闭结果集,以尽可能多地将资源释放回数据库.
*.close() 允许对象实例释放对它可能拥有的资源的引用.
在这种情况下,ResultSet这可能是相当多的其他对象.GC最终将彻底清理它们 - 如果你"放开"它ResultSet.进入是一个很好的做法.
一个Connection对象将举行与连接相关的资源.在这种情况下,GC将永远不会直接恢复这些资源(如果Connection实现finalize方法,可能会间接恢复).您希望*.close()任何可能阻碍任何有限性质的资源,因此可以重用这些资源.
例如,在连接数上设置一些上限并不罕见.如果您尽快释放这些资源,您将获得更好的响应和更少的失败可能性.
在BOTH情况下,关闭可能会提高代码的总体响应; 这是一个很好的选择.
| 归档时间: |
|
| 查看次数: |
17058 次 |
| 最近记录: |