Esportare una tabella di un database in un file .csv

di il
5 risposte

Esportare una tabella di un database in un file .csv

Ho una tabella con 4 colonne che riesco a leggere con jdbcTemplate e a riportare in un oggetto List<Abc> dove Abc è l'oggetto che contiene gli elementi della riga i-esima. Creare un file .csv è un'operazione estremamente facile, sostanzialmente basta aggiungere delle virgole. Penso che non avrei problemi a creare una stringa contenente il contenuto del predetto file ma non sarei minimamente in grado, una volta prodotta la stringa, a generare il file fisico e a mandarlo in output all'applicazione pertanto pensavo di usare un modulo ma su internet trovo un sacco di risorse. La cosa bella è che ho diverse opzioni ma la cosa negativa è che non so capire quale fra le N dipendenze sia quella più conveniente utilizzare. Mi spiacerebbe, un domani, aggiornare il framework o la versione di java ed accorgermi che il modulo che ho usato non è più valido o peggio ancora che non funzionasse più.
Google mi consiglia queste:
https://www.codejava.net/frameworks/spring-boot/csv-export-example
https://ichi.pro/it/restituzione-di-contenuto-csv-da-un-api-in-spring-boot-109858866843407
Si accettano consigli di qualunque natura!
Inoltre mi piacerebbe che la versione del modulo non fosse necessaria così quando aggiorno Spring Boot aggiorno automaticamente anche la dipendenza.

5 Risposte

  • Re: Esportare una tabella di un database in un file .csv

    iBaffiPro ha scritto:


    Creare un file .csv è un'operazione estremamente facile, sostanzialmente basta aggiungere delle virgole.
    Dovresti però anche considerare le eventuali regole di quoting/escaping. Il punto è che "csv" NON vuol dire una cosa unica ben precisa. Esistono diverse varianti.
    Generalmente è preferibile usare una libreria già fatta, come ad esempio la Apache Commons CSV.

    iBaffiPro ha scritto:


    Inoltre mi piacerebbe che la versione del modulo non fosse necessaria così quando aggiorno Spring Boot aggiorno automaticamente anche la dipendenza.
    La Commons CSV non c'entra niente con Spring Boot (cioè Boot non ha una nozione di questa libreria e non è nel <dependencyManagement> di spring-boot-dependencies), quindi le devi gestire distintamente.
  • Re: Esportare una tabella di un database in un file .csv

    Grazie mille. Nel codice sopra postato da me, relativo ad 'Apache Commons CSV', alcuni metodi sono deprecati. SuperCSV è semplicissimo da implementare e funziona alla perfezione. Non mi è chiaro il discorso 'About Commons CSV' della pagina che hai postato.
  • Re: Esportare una tabella di un database in un file .csv

    Con 'Apache Commons CSV' riesco a fare tutto ma in maniera molto più complicata. Lo script funziona ma quando tento di aprire il file .xlsx prodotto da LibreOffice a partire dal .csv scaricato dalla WebApp mi appare questo messaggio di Microsoft:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><logFileName>error073920_01.xml</logFileName><summary>Rilevati errori nel file 'C:\Users\Federico\Desktop\bulloni_2022-01-20_14-50-25.xlsx'</summary><repairedRecords><repairedRecord>Record ripristinati: Proprietà foglio di lavoro dalla parte /xl/workbook.xml (Cartella di lavoro)</repairedRecord></repairedRecords></recoveryLog>
    Il .csv è leggibile, ad occhio non vedo mancare nessuna virgola, il file .xlsx è anche ben scritto nonostante l'errore.
    Se volessi aggiungere un nuovo metodo alla WebApp che produca direttamente il file .xlsx quale dipendenza Maven dovrei usare tra le centinaia presenti online?
    Vorrei rifare la stessa cosa ma con .xlsx invece che .csv.
    Su Apple e Linux i .csv dovrebbero leggersi mentre su Windows potrebbe essere più agevole il formato di Microsoft.
    Se possibile vorrei qualcosa di supportato nel tempo come 'Apache Commons CSV'.
    P.S.: Questa a tuo avviso può andare?
    https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml/5.2.0
    https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml
  • Re: Esportare una tabella di un database in un file .csv

    iBaffiPro ha scritto:


    Nel codice sopra postato da me, relativo ad 'Apache Commons CSV', alcuni metodi sono deprecati.
    Esattamente, di quali metodi parli? Basta guardare sul javadoc (che è piccolo per la Commons CSV). Se c'è un metodo deprecato, tipicamente indica il motivo e/o cosa fare al posto di quel metodo.

    iBaffiPro ha scritto:


    Non mi è chiaro il discorso 'About Commons CSV' della pagina che hai postato.
    Fa solo una breve "storia" e dice che la Commons CSV è stata fatta per surclassare altre 3 vecchie librerie simili (quelle elencate). Poi cita come altro riferimento la Super CSV. Tutto lì.

    iBaffiPro ha scritto:


    Con 'Apache Commons CSV' riesco a fare tutto ma in maniera molto più complicata. Lo script funziona ma quando tento di aprire il file .xlsx prodotto da LibreOffice a partire dal .csv scaricato dalla WebApp mi appare questo messaggio di Microsoft:
    Non saprei che dire in questo momento e senza altre info.

    iBaffiPro ha scritto:


    Se volessi aggiungere un nuovo metodo alla WebApp che produca direttamente il file .xlsx quale dipendenza Maven dovrei usare tra le centinaia presenti online?
    https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml/5.2.0
    https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml
    Sì la Apache POI (OOXML però, per i formati XML). Ma è un pochino più complicata, devi leggerti la documentazione e il javadoc. In particolare per gli spreadsheet:
  • Re: Esportare una tabella di un database in un file .csv

    Grazie mille, tutto risolto, la Apache POI è potentissima!
Devi accedere o registrarti per scrivere nel forum
5 risposte