指标溢出

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:“怪我喽”!

扫描二维码关注公众号,回复: 295099 查看本文章

java:...... 

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

猜你喜欢

转载自eighto.iteye.com/blog/2313504