指标溢出

Connection conn = null;
PrepareStatement ps = null;
ResultSet rs = null;
String sql = "select * from  ...  where  id =? ";

try{

    conn = forName("jdbc.***");
        for(**;**;**){
           //notice : there is a "ps=conn.prepaeStatement" in loop 
            ps= conn.prepareStatement(sql);
            ps.setString(1,"4");
            rs=ps.executeQuery();
             while(rs.next()){
                  ......    
               }
         }

}catch(Exception e){


}finally{

close(conn,ps,rs);
}

      

   咳!咳!在循环中ps=conn.prepareStatement(),循环结束的末尾没有没有close ps,那么每次循环都会再次创建一个ps,对应在“在DB中”会打开了一个Cursor,而且循环中执行完ps.executeQuery()后没有ps.close()。

 

   自己就用大腿思考了下,ps变量我就只有一个呀!即使每次循环执行ps=conn.preapareStatement(),我这不就是重新赋值吗!前任ps对象不就没有引用指向了吗!那么不就被GC灰收了吗!

 

    too younge too simple sometimes navie ,每次创建ps的对象会在“DB”中打开了一个Cursor。是特么GC的锅吗!GG肯定把前任ps干掉了(哭,哭也没用),怎么干得掉DB中打开的Cursor呢!(尼玛,看来大长腿还是没大脑好用)

 

导演:各部门准备好,action!!!! 

java向oracle/mysql喊话:你们这些比比,放那么多Cursor出来,还特么不个老子管管!

oracle:“怪我喽”!

mysql:“怪我喽”!

 

java:...... 

学习不忘抄>>http://my.oschina.net/zenglingfan/blog/62746

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值