我编写了一个程序,它从数据库读取数据并写入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 行的文件。所以我尝试使用集合,但我无法保存数据......你能帮忙吗!!
最佳答案
我会保留几个计数器变量 - 一个用于保存写入当前电子表格的行数,例如,rowsWritten
,另一个用于保存迄今为止已完成的电子表格的数量,例如, 电子表格写入
。
在 while
循环内,每次迭代时递增 rowsWritten
。如果 rowsWritten
达到 100
,则写出当前电子表格,将 rowsWritten
重置为 0
,并递增 >电子表格写入
。然后,如果您不在数据库的最后一行,请创建一个新的电子表格。这个新电子表格应该是一个不同的文件名,这就是 spreadsheetsWritten
的用武之地。它可以称为 "src/MyExcel1.xlsx"
、"src/MyExcel2.xlsx"。 xlsx"
等,但这当然取决于您。确保在 while
循环完成后关闭最后一个电子表格。
关于java - 如何将结果集的数据保存在多个文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20502963/