本帖最后由 mengyalizuopeng 于 2011-12-21 10:12:05 编辑

解决方案 »

  1.   

    分批次提交,我记得好像一个batch提交数量是有限制的,大概也就在2~3万左右。
      

  2.   

     还没到提交呢 ..我先把 excel放在 数组里.. 数组装不下.....囧 
      

  3.   

    把一个excel分多个sheet,分sheet读取内容到内存,这样就不会内存溢出了
      

  4.   

    我先把 excel放在 数组里.. 数组装不下
    在文件流中分配读入到内存,在用batch提交,不要一下读入内存,这样肯定memory out.
      

  5.   

    数组内放一点 提交一点,如果没有序列,可以考虑线程
    不要一次性提交太多
    比如可以几千一个批次
    另外batch限制是65535好像,不过如果是excel03版以前 单表行数也是65535,太多了要分表
      

  6.   

    我刚断点了 InputStream is = new FileInputStream(fileName);
    jxl.Workbook rwb = Workbook.getWorkbook(is); 这就溢出了
      

  7.   

    要不这样吧:分成十个文件,打个zip包后上传到服务器端某个目录。服务端先做个解zip包的操作,然后循环读取各个文件。
      

  8.   

    现实中这么大的Excel,谁会用呢???
      

  9.   

    不用jxl,用OutputStreamWriter来一点一点输出
      

  10.   

    再狠点。JDBC读,不过问题会不少
      

  11.   


    那是肯定溢出的,jxl是将数据读取到内存了,解决方法有两种:
    第一可以设置jvm的虚拟内存。这个简单方便,但不是长久之计;
    第二可以进行分批处理,我看你是先读取了excel而文件中数据又很多,这个时候要分
    几个sheet工作表。
      

  12.   

    上传到数据库
    我经常从excel导入数据到oracle
    不过不用java,直接使用sqlldr
      

  13.   

    一般情况下,excel文档不会超过10M吧,溢出可能是你代码里有无限循环了,再仔细审查一下代码吧
      

  14.   

    这么悲催我上传下载。。读写一个65536条数据的excel一点问题没有。。Workbook.getWorkbook(is); 这句溢出。
    可能原因:
    1. 每行数据量比较大
    2. jvm分配内存小了
    3. 调大tomcat内存参数。。