免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2182 | 回复: 6
打印 上一主题 下一主题

弱弱的问一下jdbc编程 的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-01 23:28 |只看该作者 |倒序浏览
都知道用jdbc连接来执行完一个sql语句后应该把statement和返回的resultset给close
如果不close掉,会产生什么结果呢?
占用数据库资源?占用数据库哪些资源呢?
另外,除了数据库,这种写法是否会对应用程序本身造成什么影响呢?比方说是否会导致内存泄漏什么的?
如果不对statement和resultset进行close,那么,在statement和resultset的生存期都结束了之后,相应的资源是否会被回收 呢?(假设他们的生存期结束后JVM就立即进行了gc)

欢迎赐教!

论坛徽章:
0
2 [报告]
发表于 2006-11-02 09:11 |只看该作者
看看这篇经典的文章你就知道了
http://www.javaeye.com/topic/13649?page=1

论坛徽章:
0
3 [报告]
发表于 2006-11-02 22:45 |只看该作者
谢谢ilcj
看了整个贴子,写得很不错,堪 称经典.
但是整个贴子都在讨论如何去关这些资源的问题 .

我想要知道的是,如果我不关,那么会导至什么后果呢?
比如对应用程序来说:resultset队象是不在它的作用域之后却不能被GC掉(可能因为statement里面有对它隐含的引用)

论坛徽章:
0
4 [报告]
发表于 2006-11-03 01:13 |只看该作者
比方说,有下面一段代码
class Test{
   Connection conn = ...;

   public void test(){
     if(true){
        Statement stmt = conn.createStatement();
        RusultSet rs = stmt.......
     }
     while(true){
        Thread.sleep(1000);
     }

   }
}

那么,在后面的那个死循环的过程中,stmt和rs会不会被当作垃圾来回收呢(它们都是没有close的)?

论坛徽章:
0
5 [报告]
发表于 2006-11-04 00:51 |只看该作者
原帖由 mandm 于 2006-11-3 01:13 发表
比方说,有下面一段代码
class Test{
   Connection conn = ...;

   public void test(){
     if(true){
        Statement stmt = conn.createStatement();
        RusultSet rs = stmt.......
     } ...

连接不会被关闭,一直到你的java程序完全退出才会被关闭,如果你是写的一个web应用,那么可能就因为你没有关闭连接而导致程序最后OutofMemoryError。

论坛徽章:
0
6 [报告]
发表于 2006-11-05 01:02 |只看该作者
用连接池去解决这个问题!

论坛徽章:
0
7 [报告]
发表于 2006-11-11 21:58 |只看该作者
只要web container 没关 那么连接不被释放就永远占用资源..
在web中,如果10000个人都占用一个 server 的资源不放,会是什么效果 ?
当然了 单机看不出什么...!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP