【发布时间】:2010-07-06 11:39:57
【问题描述】:
我正在使用 Apache POI 编写 Excel 文件。
我想把myResultSet的所有数据都写进去
字段名(列)存储在 String[] 字段名中。
我有 70000 行和 27 列
我的代码:
String xlsFilename = "myXLSX.xlsx";
org.apache.poi.ss.usermodel.Workbook myWorkbook = new XSSFWorkbook();
org.apache.poi.ss.usermodel.Sheet mySheet = myWorkbook.createSheet("myXLSX");
Row currentRow = mySheet.createRow(0);
for (int k = 0; k < fieldNames.length; k++) {
// Add Cells Of Title Of ResultsTable In Excel File
currentRow.createCell(k).setCellValue(fieldNames[k]);
}
for (int j = 0; j < countOfResultSetRows; j++) {
myResultSet.next();
currentRow = mySheet.createRow(j + 1);
for (int k = 0; k < fieldNames.length; k++) {
currentRow.createCell(k).setCellValue(myResultSet.getString(fieldNames[k]));
System.out.println("Processing Row " + j);
}
}
FileOutputStream myFileOutputStream = new FileOutputStream(xlsFilename);
myWorkbook.write(myFileOutputStream);
myFileOutputStream.close();
我的问题是,在编写行时,程序变得越来越慢。
当它到达第 3500 行时,它会因异常而停止:
线程“Thread-3”java.lang.OutOfMemoryError 中的异常:Java 堆空间 在 java.lang.AbstractStringBuilder.(AbstractStringBuilder.java:45) 在 java.lang.StringBuffer.(StringBuffer.java:79)
我好像没有记忆了。
我该如何解决这个问题。
有没有办法将我的数据每 1000 个存储到一个临时文件中(例如)?
你有什么建议?
我在使用 jxl 时遇到了同样的问题,但也从未解决过 (JAVA - Out Of Memory Error while writing Excel Cells in jxl)
现在我无论如何都需要 xlsx 文件,所以我必须使用 POI。
【问题讨论】:
-
您使用的是哪个应用服务器?
标签: excel memory memory-management excel-2007 apache-poi