如何通过传递参数填写报告? (JAVA / Jasper报道)

时间:2016-10-31 23:16:37

标签: java jasper-reports

我从Access数据库创建了以下报告:

enter image description here

这只使用两个参数:$P{Image}(用于设置我的资源图标)和$P{Cedula}(用于WHERE子句)。在Jaspersoft Studio中工作得很完美...我从一开始就知道最大的挑战是从java调用这个报告。

我从这个网站和here读了一些问题。在VB.NET中,我目前使用reportViewer做类似于最后一页(来自类的数据源),所以我做了以下类:

package DataBeans;

public class Paciente {
private String nombre,apellido,cedula;
private String fecha_nacimiento,sexo,tipo_sangre;
private String direccion,telefono;

public void setNombre(String v){nombre=v;}
public void setApellido(String v){apellido=v;}
public void setCedula(String v){cedula=v;}
public void setFechaNacimiento(String v){fecha_nacimiento=v;}
public void setSexo(String v){sexo=v;}
public void setTipoSangre(String v){tipo_sangre=v;}
public void setDireccion(String v){direccion=v;}
public void setTelefono(String v){telefono=v;}
public String getNombre(){return nombre;}
public String getApellido(){return apellido;}
public String getCedula(){return cedula;}
public String getFechaNacimiento(){return fecha_nacimiento;}
public String getSexo(){return sexo;}
public String getTipoSangre(){return tipo_sangre;}
public String getDireccion(){return direccion;}
public String getTelefono(){return telefono;}
}

类“DataBeans”,如网站:

package DataBeans;

import Clases.Administrador;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class DataBeans {
    public ArrayList<Paciente> getPacientes(String[] values) throws ClassNotFoundException, SQLException{
        Administrador admin = new Administrador();
        ArrayList<Paciente> ListaPacientes = new ArrayList<>();
        ResultSet rs = admin.SelectParametrizado(values, "SELECT * FROM Pacientes WHERE Cedula=?");
        while(rs.next()){
            ListaPacientes.add(producirPaciente(rs.getString("Nombre"), rs.getString("Apellido"), rs.getString("Cedula")
            ,rs.getString("Fecha_Nacimiento"),rs.getString("Sexo"),rs.getString("Tipo_Sangre")
            ,rs.getString("Direccion"),rs.getString("Telefono")));
        }
        return ListaPacientes;
    }

    public Paciente producirPaciente(String n, String a, String c, String fn, String s, String ts, String d, String t){
        Paciente pac = new Paciente();
        pac.setNombre(n);
        pac.setApellido(a);
        pac.setCedula(c);
        pac.setFechaNacimiento(fn);
        pac.setSexo(s);
        pac.setTipoSangre(ts);
        pac.setDireccion(d);
        pac.setTelefono(t);
        return pac;
    }
    }

我认为我的意图清楚地反映了我尝试用两个类的代码实现的目标。函数“SelectParametrizado”(parameterizedSelect)返回一个ResultSet,用于将数据填充到arrayList(ListaPacientes)的每个元素。我希望像我的报告一样使用像数据源这样的ArrayList。

我认为实际上这个问题会加倍......原因如下:

使用此代码

private JasperPrint impresion;
private JasperReport reporte;
private JRViewer reportViewer;
private JRBeanCollectionDataSource data;
private HashMap<String,Object> parametros;
private String[] values;
private DataBeans beans;

values = new String[1];
values[0] = "3-333-3333";
beans = new DataBeans();
data = new JRBeanCollectionDataSource(beans.getPacientes(values));
    parametros = new HashMap<>();
    reporte = (JasperReport) JRLoader.loadObject(new File("Reportes/PerfilPaciente.jasper"));
    impresion = JasperFillManager.fillReport(reporte,parametros,data);
    reportViewer = new JRViewer(impresion);

我收到以下错误...

enter image description here

可能你会想到“是的,因为你没有设置Image参数”,但这也不行......

 data = new JRBeanCollectionDataSource(beans.getPacientes(values));
    parametros = new HashMap<>();
   **parametros.put("Imagen", ClassLoader.getSystemResource("perfil-azul.png").getPath());**
    reporte = (JasperReport) JRLoader.loadObject(new File("Reportes/PerfilPaciente.jasper"));
    impresion = JasperFillManager.fillReport(reporte, parametros,data);
    reportViewer = new JRViewer(impresion);

我得到“null-pointerException”..

enter image description here

我如何实现:从arraylist加载数据集并为我的报告设置一个Image参数......?

如果您了解其他方式,请随时在此处发表评论......请放心,这将会给您带来巨大的帮助。

0 个答案:

没有答案