有一个8M的Excel文件需要导入到数据库中,直接用POI导入的话会抛出内存溢出的异常,然后我写了两个参数控制导入的行数,但是还是抛出异常,请问怎样解决这个问题?
谢谢~

解决方案 »

  1.   

    将excel文件截断的代码应该怎么写呢?我写出来之后还是抛异常啊
    ~~~
      

  2.   

    你首先要知道   HTML   和   Excel之间通过改后缀名是可以相互转换的。 
    所以,你可以先读HTML,这样内存不会溢出。 注: 
    HTML   和   Excel之间的转换,你可以参考。打开一个EXCEL,然后,选择另存为网页。 
    你可以看一下这个HTML的源码。 
    还是有规律的,读取他吧
      

  3.   

    与POI无关,肯定是你使用的数据对象的问题.
    楼上,使用xml也比html强呀,不过你的主义比较馊的说,excel转换为html或者xml,excel不一样,html/xml格式的差异性是很大的,不可能每读一个excel就废很大的功夫去了解html/xml的格式,会累死人的
      

  4.   

    和POI是有关系的,好像最多处理不到7万条。
    楼上说的是,如果excel不固定的话,就比较麻烦了。不过,我处理的情况是一个报表,格式是固定的。
    反正这是一种解决方法。
      

  5.   

    废话,一个excel的sheet最多能插入65535行记录
    大数据量肯定需要分批处理呀,不可能一次都读入内存,或者插入到一个sheet中,超过65535,就需要换一个sheet开始插入
      

  6.   

    建议使用ms sql 2000的TDS功能导入数据库
      

  7.   

    呵呵,我给你一些建议。文件很大POI其实也可以实现的8M不算大。我导入过27M大的EXCEL文件。简单的办法看你的excel内容是不是很复杂,内容里面没有逗号的话,建议你把它另存为CSV文件。然后文件读取,一行一条记录,读进来之后使用java的String类的方法splite(好像是这么拼写),用逗号做分割符,传入进去,它自动会把字符串分割成一个string数组。之后的我就不说了。用此法之前,建议你先把excle的空单元格填充个你可以识别的标识,比如null。
      

  8.   

    POI肯定是没有问题的,我做过一个系统,一次批量处理上百Mb的Excel文件进数据库,一点问题都没有,就是花的时间长点而已..