Error preparing statement for excecuting the report query

0

I am working on a Java / Swing application with a PostgreSQL database. So far everything is going well. I have made several reports without problems.
But now I have the following problem. I have a CatalogoProductos.jasper report (See attached file). With the following parameters:

  • CLIENTE_INFORME_FILTRO java.lang.Integer
  • PRODUCTO_INFORME_FILTRO java.lang.String
  • COMPONENTE_INFORME_FILTRO java.lang.String

which is called from the application using the following code

private void btnImprimirActionPerformed(ActionEvent evt) {
    /* Base del informe */
    EngineReports informe = new EngineReports("/reports/CatalogoProductos.jasper", "CATALOGO DE PRODUCTOS - FICHA");
    /* Parametrización del informe */
    String prtComponente = vista.getListaComponenteId().getIdentificadorCadena(vista.getLstComponente().getSelectedValue());
    informe.setParametros("COMPONENTE_INFORME_FILTRO", prtComponente);
    int prtClliente = vista.getListaClienteId().getIdentificadorInt(vista.getLstCliente().getSelectedValue());
    informe.setParametros("CLIENTE_INFORME_FILTRO", prtClliente);
    String prtProducto = vista.getLstProducto().getSelectedValue();
    informe.setParametros("PRODUCTO_INFORME_FILTRO", prtProducto);
    /* Generación del informe */
    informe.getInforme();
}

The class in charge of the work is as follows:

package com.m3dsa.gci.controller;
 
import com.m3dsa.gci.app.Inicio;
import com.m3dsa.gci.model.PostgreSQL;
import com.m3dsa.gci.view.Application;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
 
/**
 *
 * @author Elio Gabriel Drovandini
 * @version 1.0
 */
public class EngineReports {
 
    /**
     * Constructor por defecto
     */
    public EngineReports() {
        datos = PostgreSQL.getInstancia();
        conn = datos.getConeccionOn();
        parametros = new HashMap<String, Object>();
    }
 
    /**
     * Constructor de clase
     *
     * @param recursoInforme Ruta relativa de recurso al informe de Jasper
     */
    public EngineReports(String recursoInforme, String titulo) {
        this();
        rutaRelativaRecurso = recursoInforme;
        this.titulo = titulo;
    }
 
    /**
     * Fija los parámetros de filtrado del informe
     *
     * @param <T> Parámetrización del método
     * @param nombreParametro Nombre de la variable en el informe Jasper
     * @param tipoParametro Tipo de datos de la variable de parámetro
     */
    public <T> void setParametros(String nombreParametro, T tipoParametro) {
        parametros.put(nombreParametro, tipoParametro);
    }
 
    private void setCampos() {
        rutaInforme = getClass().getResource(rutaRelativaRecurso).getPath().replaceFirst("/", "").replace("%20", " ");
        String app_denominacion = Inicio.appNombre + " V " + Inicio.versionApp;
        parametros.put("APP_DENOMINACION", app_denominacion);
        parametros.put("TITULO_INFORME", titulo);
        String paramDomicilio = Inicio.comDomicilio + ", " + Inicio.comLocalidad + " - " + Inicio.comProvincia + " (" + Inicio.comPais + ")";
        parametros.put("EMPRESA_DOMICILIO", paramDomicilio);
        parametros.put("CUIT_NUMERO", Inicio.cuit);
        parametros.put("CORREO_ELECTRONICO", Inicio.correo);
        String telFax = Inicio.telefono + " / FAX | " + Inicio.fax;
        parametros.put("TELEFONOS", telFax);
        parametros.put("LOGO_EMPRESA", getClass().getResourceAsStream("/images/empresa_logo.png"));
        parametros.put("EMISOR_INFORME", Application.getUsuario());
    }
 
    /**
     * Ejecuta el informe del cual se ha pasado su ruta relativa a los recursos
     */
    public void getInforme() {
        /* Se personaliza el informe con los campos privados de la empresa */
        setCampos();
        try {
            informe = (JasperReport) JRLoader.loadObjectFromFile(rutaInforme);
            JasperPrint impresora = JasperFillManager.fillReport(informe, parametros, conn);
            JasperViewer visor = new JasperViewer(impresora, false);
            visor.setDefaultCloseOperation(JasperViewer.DISPOSE_ON_CLOSE);
            visor.setVisible(true);
        } catch (JRException ex) {
            //Logger.getLogger(InformeSinFiltros.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, ex.getMessage(), Inicio.appNombre, JOptionPane.ERROR_MESSAGE);
        } finally {
            datos.setConeccionOff();
        }
    }
 
    /**
     * Ejecuta el informe incrustado en un JDialog para salvar el inconveniente
     * de la modalidad
     */
    public void getDlgInforme(JDialog base) {
        /* Se personaliza el informe con los campos privados de la empresa */
        setCampos();
        /* Se declara el dialogo contenedor del visor de informe */
        JDialog contenedor = new JDialog(base);
        try {
            informe = (JasperReport) JRLoader.loadObjectFromFile(rutaInforme);
            JasperPrint impresora = JasperFillManager.fillReport(informe, parametros, conn);
            JasperViewer visor = new JasperViewer(impresora, false);
            contenedor.setContentPane(visor.getContentPane());
            contenedor.setSize(visor.getSize());
            contenedor.setResizable(true);
            contenedor.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
            contenedor.setVisible(true);
        } catch (JRException ex) {
            //Logger.getLogger(InformeSinFiltros.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, ex.getMessage(), Inicio.appNombre, JOptionPane.ERROR_MESSAGE);
        } finally {
            datos.setConeccionOff();
        }
    }
 
    /**
     * Gestiona la re-conexión a la BBDD
     */
    private void setReconexion() {
        try {
            if (conn.isClosed()) {
                conn = datos.getConeccionOn();
            }
        } catch (SQLException ex) {
            //Logger.getLogger(CatalogoDAO.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, ex.getMessage(), Inicio.appNombre, JOptionPane.ERROR_MESSAGE);
        }
    }
 
    /* Declaración de campos de clase  de desarrollador */
    private PostgreSQL datos;
    private Connection conn;
    private String rutaRelativaRecurso, rutaInforme, titulo;
    private JasperReport informe;
    private JasperPrint impresora;
    private JasperViewer visor;
    private HashMap<String, Object> parametros;
    /* Fin de declaración de campos de clase de desarrollador */
}

When I run it, I get the following error:

The error stems from the code exception for the EngineReports.class class. But I can't find where the error is. Thank you in advance for your help. Best regards

gabrieldrv's picture
Joined: Nov 10 2019 - 10:59am
Last seen: 4 weeks 1 day ago

0 Answers:

No answers yet
Feedback