使用Java将结果集下载为平面文件

使用Java将结果集下载为平面文件,java,download,Java,Download,朋友们 在我的应用程序中,我遇到了一个场景,在这个场景中,用户可能会请求以平面文件的形式下载报告,其中最多可能有170万条记录(约650MB)的数据。在此请求期间,我的应用程序服务器停止为其他线程提供服务,或者出现内存不足异常 现在,我正在迭代结果集并将其打印到文件中 当我在谷歌上搜索时,我遇到了一个名为OpenCSV的API。我也试过了,但我看不到性能有任何改善 请帮我解决这个问题 感谢大家的快速响应,我在这里添加了我的代码快照 OpenCSV将清晰地处理CSV格式的古怪之处,但大型报告仍然是

朋友们

在我的应用程序中,我遇到了一个场景,在这个场景中,用户可能会请求以平面文件的形式下载报告,其中最多可能有170万条记录(约650MB)的数据。在此请求期间,我的应用程序服务器停止为其他线程提供服务,或者出现内存不足异常

现在,我正在迭代结果集并将其打印到文件中

当我在谷歌上搜索时,我遇到了一个名为OpenCSV的API。我也试过了,但我看不到性能有任何改善

请帮我解决这个问题

感谢大家的快速响应,我在这里添加了我的代码快照
OpenCSV将清晰地处理CSV格式的古怪之处,但大型报告仍然是大型报告。看看具体的内存错误,听起来您需要增加Heap或Max Perm Gen space(这将取决于错误)。如果不进行任何调整,JVM将只占用固定数量的RAM(我的经验是这个数字是64 MB)。

OpenCSV将清晰地处理CSV格式的古怪之处,但大型报告仍然是大型报告。看看具体的内存错误,听起来您需要增加Heap或Max Perm Gen space(这将取决于错误)。如果不进行任何调整,JVM将只占用固定数量的RAM(我的经验是这个数字是64 MB)。

OpenCSV将清晰地处理CSV格式的古怪之处,但大型报告仍然是大型报告。看看具体的内存错误,听起来您需要增加Heap或Max Perm Gen space(这将取决于错误)。如果不进行任何调整,JVM将只占用固定数量的RAM(我的经验是这个数字是64 MB)。

OpenCSV将清晰地处理CSV格式的古怪之处,但大型报告仍然是大型报告。看看具体的内存错误,听起来您需要增加Heap或Max Perm Gen space(这将取决于错误)。如果不进行任何调整,JVM将只占用固定数量的RAM(我的经验是这个数字是64 MB)。

如果只将数据从resultset流式传输到文件,而不使用大缓冲区,这应该是可能的,但可能是在发送到文件之前先在不断增长的列表中收集数据?所以你应该调查这个问题


请详细说明您的问题,否则我们不得不猜测。

如果您只将数据从结果集流式传输到文件,而不使用大缓冲区,这应该是可能的,但您可能是在发送到文件之前先收集不断增长的列表中的数据?所以你应该调查这个问题


请详细说明您的问题,否则我们不得不猜测。

如果您只将数据从结果集流式传输到文件,而不使用大缓冲区,这应该是可能的,但您可能是在发送到文件之前先收集不断增长的列表中的数据?所以你应该调查这个问题


请详细说明您的问题,否则我们不得不猜测。

如果您只将数据从结果集流式传输到文件,而不使用大缓冲区,这应该是可能的,但您可能是在发送到文件之前先收集不断增长的列表中的数据?所以你应该调查这个问题


请详细说明您的问题,否则我们将不得不猜测。

CSV格式不再受内存限制——好吧,可能只是在为CSV预填充数据期间,但这也可以有效地完成,例如,使用LIMIT/OFFSET从DB查询行子集,并立即将其写入文件,而不是在写入任何行之前将整个DB表内容拖到Java内存中。Excel对一张“工作表”中的金额行的限制将增加到大约一百万


大多数像样的数据库都有一个导出到CSV的功能,这无疑可以更有效地完成这项任务。例如,在MySQL中,您可以使用LOAD DATA INFILE命令来实现这一点。

CSV格式不再受内存的限制——可能只是在为CSV预填充数据的过程中,但这也可以有效地完成,例如,使用LIMIT/OFFSET从DB查询行子集,并立即将其写入文件,而不是在写入任何行之前将整个DB表内容拖到Java内存中。Excel对一张“工作表”中的金额行的限制将增加到大约一百万


大多数像样的数据库都有一个导出到CSV的功能,这无疑可以更有效地完成这项任务。例如,在MySQL中,您可以使用LOAD DATA INFILE命令来实现这一点。

CSV格式不再受内存的限制——可能只是在为CSV预填充数据的过程中,但这也可以有效地完成,例如,使用LIMIT/OFFSET从DB查询行子集,并立即将其写入文件,而不是在写入任何行之前将整个DB表内容拖到Java内存中。Excel对一张“工作表”中的金额行的限制将增加到大约一百万


大多数像样的数据库都有一个导出到CSV的功能,这无疑可以更有效地完成这项任务。例如,在MySQL中,您可以使用LOAD DATA INFILE命令来实现这一点。

CSV格式不再受内存的限制——可能只是在为CSV预填充数据的过程中,但这也可以有效地完成,例如,使用LIMIT/OFFSET从DB查询行子集,并立即将其写入文件,而不是在写入任何行之前将整个DB表内容拖到Java内存中。Excel对一张“工作表”中的金额行的限制将增加到大约一百万


大多数像样的数据库都有一个导出到CSV的功能,这无疑可以更有效地完成这项任务。例如,对于MySQL,您可以使用LOAD DATA INFILE命令执行此操作。

您使用的是哪个数据库?请
   try {

    response.setContentType("application/csv");

    PrintWriter dout = response.getWriter();

    while(rs.next()) {
     dout.print(data row);  // Here i am printing my ResultSet tubles into flat file.
     dout.print("\r\n");
     dout.flush();
}