我从Access数据库创建了以下报告:
这只使用两个参数:$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);
我收到以下错误...
可能你会想到“是的,因为你没有设置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”..
我如何实现:从arraylist加载数据集并为我的报告设置一个Image参数......?
如果您了解其他方式,请随时在此处发表评论......请放心,这将会给您带来巨大的帮助。