Visualizzazione post con etichetta database. Mostra tutti i post
Visualizzazione post con etichetta database. Mostra tutti i post

mercoledì 2 marzo 2016

Java leggere formattazione da database


Capita in Java, di dover generare dei file, ovviamente ogni file generato deve avere delle specifiche, per esempio un csv, nonostante la "c" stia per "comma" (ovvero virgola) puo' avere come separatore di campo qualsiasi carattere, idem per il fine riga. Puo' essere accapo (\n), ; etc.

Questo non e' un problema se scrivete direttamente nel codice, il che non e' un problema se le specifiche non cambiano mai. Siccome le specifiche cambiano, e le mamme invecchiano, e' bene parametrizzare questi valori e pescarli da qualche parte.

Questo qualche parte puo' essere un file o un database, il problema che si presenta e' lo stesso. Ovvero che java non riconosce o lo "\" e quello che lo segue come un terminatore di riga, ma lo tratta come se fosse un letterale (quindi \\n p.es). Anche se provate in unicode il problema rimane esattamente lo stesso (visto che c'e' \ davanti...).

La soluzione ce la offre Apache con StringEscapeUtils scaricabile da qui con il metodo statico StringEscapeUtils.unescapeJava(String) il quale ci restituisce la stringa "escapata" per java. La classe ne contiene altri ovviamente sia di escape che unescape, per csv, html, sql, xml etc...

Alla prossima!

giovedì 22 ottobre 2015

Java - farlo bene farlo sbagliato

Quando si sviluppa software bisognerebbe sempre avere un'occhio alle risorse, perche' queste comunque non sono infinite. Se su progetti piccoli la differenza e' poca, quando si inizia a parlare di centinaia di migliaia di righe da tirare giu' - su database che ne contengono decine di milioni ogni singola query conta.

  • Andare a fare una chiamata in hql per tirarti giu' le righe che ti servono: bene
  • Fare un ciclo su ognuna di queste righe per trasformare le entity in un pojo: un po' meno bene
  • Fare una chiamata a database con una select count per sapere quante righe hai estratto: lo stai facendo sbagliato

Il problema e' che no, non me lo sono inventato... Invocare il metodo size() sulla lista che ti restituisce hibernate era troppo difficile?

...e poi dice che quella query e' lenta... No e' lento chi l'ha scritta...