2017-08-30 2 views
2

Je crée un service REST qui charge les données de la table de base de données Oracle à l'aide de JDBC et enregistre le resultset au format CSV.Appel REST pour enregistrer grand ResultSet à CSV téléchargeable

Étant donné que la table est très grande, le processus devrait durer environ une heure.

Comment puis-je télécharger CSV tout enregistrement des données à ce
(donc nous obtenons un cycle comme celui-ci: charge morceau (une certaine quantité de lignes), sauvegarde au format CSV et ras cette partie (Télécharger))?

cela est destiné à:

  1. empêcher la tenue du fichier entier dans la mémoire du serveur, en rinçant périodiquement au client (En supposant pilote JDBC ne va pas chercher toutes les tables immédiatement)
  2. show (. presque) des progrès immédiats à l'utilisateur (si l'utilisateur ne sera pas attendre que CSV est terminée)

Répondre

-1

quelque chose comme ça est assez bon:

@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

Qu'est-ce que 'i' dans' array [i] '? –

+0

tableau est juste un exemple de conteneur de données qui contient des données. Cela contredit l'idée de ne pas conserver toutes les données en mémoire. donc il devrait être remplacé par 'outputStream.write (int b)' – MoneerOmar

+0

code fixe (je l'ai raté accidentellement) – MoneerOmar