java poi 读取Excel2007版本时内存溢出
柏澄君 2013-01-23 04:57:28 java poi 读取Excel2007版本时内存溢出,Excel有35000行数据,主要是想导入数据库,导入同样大小的Excel2003时没问题,读取Excel2007版本时就内存溢出了。下面是读取Excel2007的代码。哪位大神帮忙看一下啊?
public void readExcel2007(DBModel dbConn, String filePath, String tableName)
throws Exception {
try {
InputStream inp = new FileInputStream(filePath);
XSSFWorkbook wb = new XSSFWorkbook(inp);
int num_sheet = wb.getNumberOfSheets();
for (int i = 0; i < num_sheet; i++) {
XSSFSheet sheet = wb.getSheetAt(i);
int rows = sheet.getPhysicalNumberOfRows(); // 获得行数
if (rows > 0 && rows < 35000) {
sheet.getMargin(XSSFSheet.TopMargin);
for (int r = 0; r < rows; r++) { // 行循环
// 迭代行
XSSFRow row = sheet.getRow(r);
if (row != null && r != 0 && r != 1 && r != 2) {// 不取第一行,第二行
int cells = row.getLastCellNum();// 获得列数
// 迭代单元格
Vector datas = new Vector();//定义存放返还的集合的实体
//ArrayList datas = new ArrayList();
for (short c = 0; c < cells; c++) { // 列循环
// 定义集合datas用于存Excel中一个行的数据
XSSFCell cell = row.getCell(c);
if(cell != null){
String value = getValue2007(cell).toString();//得到每一列的值不管是什么类型都转换成字符串
// 行和列是基于0索引
System.out.println("第" + r + "行 " + "第" + c
+ "列:" + value);
datas.add(value);
}
}
// 向表中插入数据
DBFactory.insertData(dbConn, tableName, datas);
}
//关闭数据库
//DBFactory.closeConnection(dbConn, null);
}
} else {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("readExcel2007 方法异常:" + e);
throw e;
}
}