2010-05-10 108 views

回答

9

确实,在几乎所有JDBC驱动程序实现中关闭Connection也隐含地关闭了Statement。但是,当您使用连接池(并且您想要使用连接池,因为这大大提高了连接性能)时,将不会关闭Connection,但会将其释放回池中,因此,当您使用连接池时,会出现一个大的打开Statement。而当你经常这样做时,迟早你会耗尽资源,这可能会导致你的应用程序被终止。

始终掌握并关闭所有三个资源ConnectionStatement并在最短的范围ResultSet,没有任何借口。

+0

是的,没有任何东西会教你使用try/finally,而不是在一天的生产中耗尽资源。 – 2010-05-10 21:47:42

+0

由于懒惰的开发人员不理解,你周六工作的人不能重复使用与池连接相同的语句引用(因此不需要使用游标运行数据库),所以我希望鼓励你注意BalusC的话! – Affe 2010-05-10 21:51:35

+0

啊哈!尽管目前我没有使用连接池(我目前没有真正需要的),但如果我现在关闭并正确使用所有内容并决定在未来。谢谢! – javanix 2010-05-10 21:57:05

1

将所有样板代码移动到辅助方法/类。

通过这种方式,您可以按照与JDBC(或任何其他有限资源包)文档一致的方式获取/释放资源,并且您的业务逻辑不会被JDBC混乱所污染。

虽然现在看起来对您来说可能很浪费,但将单一查询专用于业务逻辑类中的单个方法没有任何问题。

+0

您能否详细说明最后一点? “将单个查询专用于业务逻辑类中的单个方法没有任何问题。” 我想你是在谈论某种查询包装,但我很好奇你将如何实现一些没有大量参数的类。 – javanix 2010-05-10 22:03:31

+0

@javanix。从你原来的问题来看,你希望用一种方法运行一些SQL命令,并且关心必要的SQL混乱。最后一段提示您可以使用单一方法来运行设置的单个查询并关闭JDBC工件。由于我对您的原始发布的要求一无所知,因此您的情况可能不太实际。另外请记住,巨大的设置或参数可以隐藏在简单界面的具体实现背后。这就是承载国家信息的类别。 – 2010-05-10 22:38:13