2017-08-30 71 views
2

我正在创建一个REST服务,该服务使用JDBC从Oracle数据库表中加载数据,并将resultset保存为CSV。REST调用将大型ResultSet保存为可下载的CSV

由于表格非常大,因此预计该过程大约需要一个小时。

如何下载CSV 将数据保存到它
(所以我们得到这样一个循环:负载块(行一定量),保存到CSV,并冲洗一部分(下载) )?

这是为了:

  1. 防止拿在服务器内存中的整个文件,通过定期冲洗到客户端(假设 JDBC驱动程序不取立即将所有表)
  2. 秀(。几乎是)立即取得进展的用户(用户因此不会等到CSV完成)

回答

-1

这样的事情是不够好:

@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(); 
} 
+0

'array'[i]''处的'i'是什么? –

+0

数组只是数据容器保存数据的一个示例。这与将所有数据保存在内存中的整个想法相矛盾。所以它应该被替换'outputStream.write(int b)' – MoneerOmar

+0

固定代码(我不小心错过了它) – MoneerOmar