java - REST 调用以将大型结果集保存到可下载的 CSV

标签 java rest csv jdbc resultset

我正在创建一个 REST 服务,它使用 JDBC 从 Oracle 数据库表加载数据,并将 resultset 保存在 CSV 中。

由于 table 很大,预计这个过程大约需要一个小时。

如何在保存数据的同时下载 CSV
(所以我们得到一个这样的循环:加载 block (一定数量的行),保存到 CSV,然后刷新那部分(下载) )?

这是为了:

  1. 通过定期将文件刷新到客户端来防止将整个文件保留在服务器内存中。(假设 JDBC 驱动程序不会立即获取所有表)
  2. (几乎)立即向用户显示进度(因此用户不会等到 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/

相关文章:

java - GSON 解析索引 JSON

java Locale.Builder setExtension(Locale.UNICODE_LOCALE_EXTENSION

api - REST API URL 必须像这样吗?

javascript - 使用 csv-parser 只返回文件头

java - 从元素列表中的 json 加载

java - 在表中插入数组列表的各个值

node.js - 用于 REST API 的 derbyjs

rest - Grails POST请求字符集编码

java - 解析csv文件并在java集合hashmap中显示特定信息

Python:计算列表列表中元素对的频率