2017-08-30 10 views
2

JDBCを使用してOracleデータベーステーブルからデータをロードし、resultsetをCSVに保存するRESTサービスを作成しています。ダウンロード可能なCSVに大きなResultSetを保存するRESTコール

テーブルが非常に大きいので、処理に約1時間かかることが予想されます。

は、どのように私はがそれにデータを保存中
(ので、我々はこのようなサイクルを取得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

関連する問題