REST调用将大型ResultSet保存为可下载的CSV
问题描述:
我正在创建一个REST服务,该服务使用JDBC从Oracle数据库表中加载数据,并将resultset
保存为CSV。REST调用将大型ResultSet保存为可下载的CSV
由于表格非常大,因此预计该过程大约需要一个小时。
如何下载CSV 而将数据保存到它
(所以我们得到这样一个循环:负载块(行一定量),保存到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();
}
'array'[i]''处的'i'是什么? –
数组只是数据容器保存数据的一个示例。这与将所有数据保存在内存中的整个想法相矛盾。所以它应该被替换'outputStream.write(int b)' – MoneerOmar
固定代码(我不小心错过了它) – MoneerOmar