我编写了一个程序,它从数据库读取数据并写入excel。我的代码如下......
public String ReadRows(String query) throws SQLException
{
FileOutputStream fileOut = null;
File file=new File("src/MyEcel.xlsx");
String returnString = "";
Connection c = null;
int row = 1;
XSSFWorkbook workbook = new XSSFWorkbook();
try {
Class.forName("org.postgresql.Driver");
c = DriverManager.getConnection("url",username,password);
c.setAutoCommit(false);
System.out.println("Opened database successfully");
Statement stmt = c.createStatement();
XSSFSheet sheet = workbook.createSheet("NewData");
ResultSet rs = stmt.executeQuery(query);
while(rs.next())
{
myRow= sheet.createRow(row);
row++;
for (int col = 1; col<ColumnCount(); col++)
{
if (rs.getObject(col) == null)
{ //code;
}
else
{ //code
}
}
fileOut = new java.io.FileOutputStream(file);
workbook.write(fileOut);
fileOut.flush();
System.out.println("The size of file is "+file.length());
fileOut.close();
//java.awt.Desktop.getDesktop().open(file);
}
catch(Exception ex)
{// ex.printtrace();
}
}}
我怀疑如何处理大量数据?我发现很少有文章说SXXSF会处理这个问题。但是,它只将数据流式传输到一个大文件中。我需要一个文件,每个文件只保存100个。所以我尝试使用集合,但我无法保存数据......你能帮助!!
答案 0 :(得分:1)
我会保留一些计数器变量 - 一个用于保存写入当前电子表格的行数,例如rowsWritten
,另一个用于保存到目前为止已完成的电子表格数量,例如{{1 }}
在spreadsheetsWritten
循环内,在每次迭代时递增while
。如果rowsWritten
已达到rowsWritten
,请写出当前的电子表格,将100
重置为rowsWritten
,然后增加0
。然后,如果您不在数据库的最后一行,则创建一个新的电子表格。这个新的电子表格应该是一个不同的文件名,这就是spreadsheetsWritten
所在的位置。它可以被称为spreadsheetsWritten
,"src/MyExcel1.xlsx"
等,但当然这取决于你。确保在"src/MyExcel2.xlsx"
循环完成后关闭最后一个电子表格。