Archivi tag: java

ECCEZIONI JAVA – org.springframework.jdbc.BadSqlGrammarException

Ultimamente mi sono imbattuto in un problema interessante legato ai driver Oracle: una funzione rilasciata non funzionava nel nuovo ambiente e dava l’eccezione BadSqlGrammarException e più precisamente .

Comincio l’analisi del problema e la segnalazione fa pensare che l’applicativo stia invocando in modo errato la function, che effettivamente in ingresso riceve 5 parametri e non 4 come fa vedere il log. Rigenero il war pensando che sia stata installata una versione diversa ma il problema persiste. A questo punto penso che il problema possa essere lato db, pertanto rigenero gli script sql e vengono reinstallati nell’ambiente di riferimento. Niente da fare. Mi accorgo che la versione Oracle tra i 2 ambienti è differente, ma questo non dovrebbe spiegare l’errore. Non mi resta che controllare i 2 ambienti, in questo caso un tomcat 7 e mi accordo che  i 2 ambienti presentano versioni di driver oracle differenti. Il cliente aveva effettuato l’aggiornamento della versione Oracle alla 12 e di conseguenza aveva aggiornato la versione del driver Oracle, passando dalla 10 alla 12. Ecco individuato il problema, la chiamata falliva se fatta con il nuovo driver. La chiamata sfrutta la classe SimpleJdbcCall offerta da Spring

Per risolvere il problema ho dovuto modificare il sorgente, rinunciare alla SimpleJdbcCall  e utilizzare la classica CallableStatement

 

JASPERREPORTS TUTORIAL – 6 – CREIAMO IL NOSTRO REPORT IN JAVA

Nell’articolo di oggi vedremo come generare il nostro report in pdf partendo dal modello generato con Ireport.

Il primo passo è quello di generare il nostro report a partire dal formato jrxml. Per fare questo JasperReports ci mette a disposizione la classe JasperCompileManager

JasperReport jasperReport = JasperCompileManager.compileReport(“reportFromXml.jrxml”);

Tale classe permette di compilare il report e ottenere un file .jasper, lo stesso file che otteniamo quando generiamo l’anteprima con Ireport.

A questo punto resta da riempire il report compilato con i dati che provengono da un datasource. Questo meccanismo viene realizzato dalla classe JasperFillManager

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), ds );

La classe JasperFillManager mette a disposizione il metodo fillReport che permette di riempire il nostro report tramite una serie di parametri che vengono forniti tramite un oggetto di tipo Map e un datasource di tipo JRDataSource.

L’interfaccia JRDataSource è un’interfaccia che prevede la definizione di 2 metodi: il metodo next che permette di scorrere il datasource e il metodo getField che permette di recuperare la proprietà del bean del datasource.

Nel nostro esempio ho definito una semplice implementazione dell’interfaccia che permette di scorrere un elenco di libri e accedere ad alcune sue proprietà.

Il metodo next permette di scorrere il nostro datasource. Ritorna true se è presente un altro elemento all’interno del datasource, mentre il metodo getFieldValue permette di accedere alla singola proprietà del record.

A questo punto tramite la classe JasperExportManager possiamo estrarre il nostro report nel formato desiderato.

JasperExportManager.exportReportToPdfFile(jasperPrint, “c://Simple_Report.pdf”);

Qui trovate le classi per compilare il progetto