我晕,循环在外面!
Statement s=conn.createstatement();
ResultSet rs=s.excutequery(sql);
while (rs.next()){
}
……

解决方案 »

  1.   

    如果返回这么多的记录,很可能算法有问题,需要返回这么多吗
    关闭resultset和connection要放在try{}catch{}finally{}中的finally里
      

  2.   

    statement不要放在循环里,一个statement可以多次使用。
      

  3.   

    不会出现你说的情况,把整张表放入内存中,至于你出现的内存急剧上升的问题,应该是你代码的问题,算法有问题,同意一楼所说:
    Statement s=conn.createstatement();
    ResultSet rs=s.excutequery(sql);
    这两句实例化对象的语句应该放在循环的外面,如果要实例化几千个ResultSet和Statement对象,占用100M内存不是没有可能啊,呵呵。建议改为:
    try{
    Statement s=conn.createstatement();
    ResultSet rs=s.excutequery(sql);
    for(int i=0;i<2000;i++){
    ……
    ……
    }
    catch(Exception e)
    {}
    finally{
    rs.close();
    s.close();
    }
      

  4.   

    另外借你的地方做个广告,大家帮我啊,200分相送,帮忙出谋划策,200不够可以再加,各位大侠去看看啊!http://expert.csdn.net/Expert/topic/2120/2120463.xml?temp=.1377832
    主  题:  用JAVA实现图形化流程定制的功能,用户通过拖拽绘制流程,提交后经流程信息和节点之间的关系写入数据库,大家提点思路就好! 
    作  者:  phoenix7789 (火鸟)  
    问题点数:  200
      

  5.   

    对不起,我想是我没说清楚,应该这样。
    public String[][] Result(String sql){
    String[][] info;
    try{
      Statement s=conn.createstatement();
     ResultSet rs=s.excutequery(sql);
     ……
     ……//把rs放到info里
     rs.close();
     s.close();
    }catch(SQLException e){
    return null;
    }
    return info;
    }public void test(String sql[]){
    for(int i=0;i<2000;i++)this.Result(sql[i]);
    }
      

  6.   

    wa! info你要放那么多数据阿,几百万??  难怪那么多内存。
    不能取除你所需要的数据,然后再处理。干吗全取出来
      

  7.   

    Statement s=conn.createstatement();
     ResultSet rs=s.excutequery(sql);
     ……
     ……//把rs放到info里     ??????
    那该有多大?? :)
    ------------------------------
      

  8.   

    每次我都把statement关闭了,有什么问题么?
      

  9.   

    提点小建议:
        这样做:把你要读出的数据分页,然后每次只提出一小部分来,还有最好在catch后加上finally处理,这样是最稳妥的办法!