我正在创建一个 REST 服务,它使用 JDBC 从 Oracle 数据库表加载数据,并将 resultset
保存在 CSV 中。
由于 table 很大,预计这个过程大约需要一个小时。
如何在保存数据的同时下载 CSV
(所以我们得到一个这样的循环:加载 block (一定数量的行),保存到 CSV,然后刷新那部分(下载) )?
这是为了:
- 通过定期将文件刷新到客户端来防止将整个文件保留在服务器内存中。(假设 JDBC 驱动程序不会立即获取所有表)
- (几乎)立即向用户显示进度(因此用户不会等到 CSV 完成)
最佳答案
像这样就足够了:
@GET
@Produces("text/csv")
@Path("/get")
public Response getData(@Context HttpServletRequest request,
@Context HttpServletResponse response) throws IOException {
response.setHeader("Content-Disposition", "attachment; filename=data_file.csv");
ServletOutputStream outputStream = response.getOutputStream();
// here you read from ResultSet.
while (resultSet.next()) {
byte b = (byte) (resultSet.getByte("columnA"));
outputStream.write(b);
}
outputStream.flush();
outputStream.close();
return Response.ok().build();
}
关于java - REST 调用以将大型结果集保存到可下载的 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45952578/