关闭DB连接的问题,请指教!

fsolsh 2008-02-26 12:14:33
常见java中,一个有DB访问的方法,最后都有这么一段:
finally
{
resultSet.close();
statement.close();
connection.close();
}
而c#中,一个有DB访问的方法,最后都有这么一段:
finally
{
dateReader.Close;
CloseConnection(facadeContext);
}

我的问题是:
不管java中的resultSet、statement,还是c#中的dateReader
都建立在connection之上的,那么我们为什么不可以用connection.close();来结束一切,
而不必去显式的关闭诸如resultSet、statement、dateReader?
很多书上提供的代码都是显式的关闭了那么多东西,
我不明白的是,连接都关闭了,而resultSet、statement、dateReader这些东西还需要显式的关闭吗?为什么?
请高手赐教!
...全文
203 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fsolsh 2008-03-14
  • 打赏
  • 举报
回复
Thank you for your help!
本人是发帖的人,来这里做个总结。
我发帖的目的就是想要确定一下connection.close(); 是否会随之关闭resultSet statement?
1楼----没有仔细阅读原帖,答非所问。
3楼----站的很高,却更是离题千里之外。
4楼----没有仔细阅读原帖,不知所云。
5楼----比喻在[流程]上很贴切,可以让我接受。我们知道,电子类产品断电对硬件可能造成一些不可预知的危害,只是,我想知道,针对释放资源这个话题,我们可否类似电视的直接断电来over一切,直接connection.close(); ,毕竟它带来的不同于电视断电的伤害。也请老兄深究一下,有一天故地重游,可以再做这个深入探讨。
6楼、7楼、9楼、11楼----谢谢关注。
8楼----没有仔细阅读原帖,作为软件开发人员,力求明白每句代码的意义,减少垃圾代码应该是基本素质之一,而非个人好恶,所谓知其然,更要所以然。
10楼----知我者兄是也。如老兄所述,现在还有两个问题。

A-直接connection.close();是否会给DB带来类似电视断电的危害?
B-直接connection.close();能否随之释放resultSet?
如果A的答案是否定的,B的答案是肯定的,那么我们代码中如下一句足以。
finally
{
connection.close();
}

也请路过的各位高手不吝赐教,再次感谢大家,尤其rex0y老兄,谢谢。
SilkPulse 2008-02-27
  • 打赏
  • 举报
回复
语言不同自然也就不同,不能用同一种思维面对所有的语言
毕竟不是一个公司的产品,设计的思路也不同
你不喜欢
finally
{
resultSet.close();
statement.close();
connection.close();
}
因为繁琐?还是因为?
如果你希望用
CloseConnection();
关闭的话
那你可以写一个CloseConnection类
这个类中包含了上述三个方法,你每次需要如上关闭的话
调用CloseConnection类一次就搞定了
ee4456 2008-02-27
  • 打赏
  • 举报
回复
你关了connection那么记得每次要查询操作时候先判断下,开一次。。。
rex0y 2008-02-27
  • 打赏
  • 举报
回复
我觉得楼主的问题问的很好
而大家的回答确充分的体现了你们的网络语言特性。

总结一句 你们把csdn搞烂了


我想楼主的意思是:
确定一下connection.close(); 是否会随之关闭resultSet statement
如果是这样的话就写了2句多余的代码

我是看过帮助文档的 关于statement有说明,如果连接关闭statement随之关闭
resultSet好像没看过,我现在也不怎么写java了
Amerson 2008-02-27
  • 打赏
  • 举报
回复
就是要释放资源!

关电视机的例子很形象!
yami251139 2008-02-27
  • 打赏
  • 举报
回复
你嫌煩可以寫成connection。release(rs,stmt,con)
這樣就可以少寫點。。。
duzhonghua 2008-02-27
  • 打赏
  • 举报
回复
相信5楼的解说最有说服力吧,
  • 打赏
  • 举报
回复
楼上的解释十分地贴切。
wuy13862574600 2008-02-27
  • 打赏
  • 举报
回复
就像你看完电视关电视机,先关电视机的开关在断电源一样
而不是直接把插头拔掉
-狙击手- 2008-02-26
  • 打赏
  • 举报
回复
释放资源
老紫竹 2008-02-26
  • 打赏
  • 举报
回复
JDK只提供了最基础的功能,任何人都可以按照自己喜爱的方式组织他们
这也造成了Java的白花齐放的局面。

这是好事情,但对于某些人来说,就是坏事情。

如果你不想这么繁琐,你应该用现成的组件,比如Hibernate, JPA
而不是你自己操作JDBC的Connection.


OVER。 有了选择真的好,有了如此多的选择,真的好吗??
fsolsh 2008-02-26
  • 打赏
  • 举报
回复
也许是我问的不够清楚
我明白那是在释放资源
我想知道:
=========================================================
是不是connection.close();这么一句话就可以?
而不必再要譬如resultSet.close(); 、statement.close();或者dateReader.Close; 的操作?
毕竟resultSet、statement、dateReader等都是建立在connection之上。
=========================================================
不知道我说明白了没有?
请看清楚我问什么,再做回答。

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧