使用POI读取excel内存溢出

懵逼中敲代码 2017-02-22 03:51:40
在网上找的代码,数据量小的时候可以使用。但遇到10W+的数据就内存溢出了。
贴上代码:
public void readExcel2007(DBModel dbConn, String filePath)
throws Exception {
try {
// InputStream inp = new FileInputStream(filePath);
// Workbook wb = WorkbookFactory.create(inp);
XSSFWorkbook wb = new XSSFWorkbook(filePath); //内存溢出,一直卡在这儿
int sheetSize = wb.getNumberOfSheets();
for (int i = 0; i < sheetSize; i++) {
XSSFSheet sheet = wb.getSheetAt(i);
String tableName = sheet.getSheetName(); //获取sheet页名字 对应找到数据库表名
for (Iterator rit = sheet.rowIterator(); rit.hasNext();) {
// 迭代行
XSSFRow row = (XSSFRow) rit.next();
if(row.getRowNum()>0){ //第二行开始读取
// 迭代单元格
Vector datas = new Vector();
for (Iterator cit = row.cellIterator(); cit.hasNext();) {
// 定义集合datas用于存Excel中一个行的数据
XSSFCell cell = (XSSFCell) cit.next();
String value = getValue2007(cell);
// 注意行和列是基于0索引的
// System.out.print(cell.getRowIndex() + ":" + cell.getColumnIndex() + " ");
datas.add(value);
// 开始操作单元格
}
// 向表中插入数据
DBFactory.insertData(dbConn, tableName, datas);
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
throw e;
} catch (InvalidFormatException e) {
e.printStackTrace();
throw e;
} catch (IOException e) {
e.printStackTrace();
throw e;
}
}
...全文
851 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_39684723 2017-12-22
  • 打赏
  • 举报
回复
遇上了相同的问题,楼主解决了吗?
qq_37392380 2017-03-15
  • 打赏
  • 举报
回复
是不是java内存溢出 文件过大 应该是物理内存不够
奄灬苟且偷生 2017-03-13
  • 打赏
  • 举报
回复
要不拆分字符流,劈一半?
qq_16119179 2017-03-13
  • 打赏
  • 举报
回复
楼主解决了吗?
懵逼中敲代码 2017-02-23
  • 打赏
  • 举报
回复
引用 3 楼 m2200 的回复:
太大确实不太好,建议拆分下
怎么拆分呢?
爱睡觉的阿狸 2017-02-23
  • 打赏
  • 举报
回复
太大确实不太好,建议拆分下
懵逼中敲代码 2017-02-23
  • 打赏
  • 举报
回复
发现 poi sax解析excel2007大文件。可是没太懂,他解析完后 是一个什么东西? 我看到 xxx.process()解析后 我怎么存入数据库呢?
懵逼中敲代码 2017-02-22
  • 打赏
  • 举报
回复
我的需求是:读取excel存入数据库,sheet页是数据库的表名。所以我要解析出sheet页的名字,在解析excel。 求大神帮帮我。这周要完成。 目前excel就只用2007的。

50,543

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧