解决方案 »

  1.   

    你是要按userid的后两位写文件的,所以写个循环,分批次查询就好了啊。
    如果还是不行,就用rownum。
      

  2.   

    你确定你的内存是在这段代码里溢出的么?jdbc的resultset和你的操作都是流操作,正常情况下应该是不会有大量内存占用的,去分析一下你溢出的内存的占用情况吧
      

  3.   

    我刚搞了跟你差不多功能的问题,主要是你没有分页去处理,将sql语句分页处理,每10000条或者20000条记录查询一次(这个得根据你写入文件的字符串的长度,如果记录太多字符串有可能超出最大长度,你这里我觉得每次执行100000条记录都没问题),然后写入到文件中再进行下一次操作,就不会出现内存溢出的问题了
      

  4.   

    每次循环就执行writerSml.write(phoneNo+"|"+userId+"\r\n");由于数据量太大,导致内存溢出,建议分批次查询导出。
      

  5.   

    你的statement没释放,当然内存会溢出……
    这种文件见过好多了String sql = "SELECT PHONE_NO PHONE_NO,USER_ID USER_ID FROM "+ tableName ;
    Statement stmt = null;
     try { 
         dbaction.getConn(); 
             stmt = dbaction.con.createStatement();     
          ResultSet rs = stmt.executeQuery(sql);
    while (rs.next()){                 
    .....
    }
    catch(Exception e) {
    }
    finally {
       if (stmt != null){
         stmt.close();
       }
      // connection,也要在这里释放,如果是连接池的,则是还回池中.
    //  其实所有的文件读写的close,都是最好放在finally 块中。
    }
      

  6.   

    这个吧,你从数据库那就得先处理。1、需求:从数据库中读取百万级的记录,(包括用户手机号、用户id)取出后按照userid后两位分(00-99)生成100不同的txt文件。----------------------
    先截取userid后两位 然后分组并统计一下。 看看每组有多少计录,然后再一批一批的取。
      

  7.   

    哎。。我这是从xml文件里读取数据数量级别不等的xml文件分批解析xml,再放数据库吧,怕中间有异常,文件和数据库数据不一致
      

  8.   

    用线程池,规定每次启动2个线程,其余的排队,每个线程1000条记录,等所有线程跑完毕后将所有生成txt文件打包成zip文件。