如何使用JasperReports查看表中的一条记录?

时间:2012-12-12 21:24:52

标签: java jasper-reports

我现在正在开展一个诊所项目,我需要为项目打印特别报告,例如特定病人的私人信息。

所以我为我的项目工作了数据库,并在数据库和JDeveloper之间建立了连接。我设计的报告由JasperReport 5程序打印,我在Jasperreport 5和JDeveloper程序之间建立了连接。现在我想通过Patient_Id为特定患者打印报告。最后,我需要从我的数据库中的表中的一条记录打印报告,而不是数据库中表中的所有记录。

这是连接JasperReport和JDeveloper之间的代码:

Connection con;

InputStream input=null;

Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
con = DriverManager.getConnection(url, "hr", "hr");
input=new FileInputStream(new File("report.jrxml")); 

JasperDesign jasperDesign;
jasperDesign=JRXmlLoader.load(input);

JasperReport jasperReport;
jasperReport=JasperCompileManager.compileReport(jasperDesign);
JasperPrint jasperPrint;
jasperPrint=JasperFillManager.fillReport(jasperReport,null,con);
JRViewer v=new JRViewer(jasperPrint);
v.setVisible(true);
JFrame fr2=new JFrame();
fr2.setSize(200, 200);
fr2.add(v);
fr2.setVisible(true);

input.close();
con.close();

2 个答案:

答案 0 :(得分:1)

从提供的代码外观中,您已嵌入查询以在报告中获取患者信息。哪个好。现在,您需要微调该查询以获得单个结果。因此,基本上您需要将一个参数传递给报告,以便为其提供患者ID,然后按此过滤结果。由于你已经在使用sql,因此直接在sql中进行过滤(这就是数据库所擅长的,所以让它去做)。

以下是您需要遵循的步骤:

  1. 在您的报告中,创建一个名为PATIENT_ID的新参数 Integer(或者可能更合适的东西,取决于 数据库中字段类型的患者ID)。
  2. 在您的查询中编辑WHERE子句(或附加到 现有WHERE子句使用和AND)以下(假设 患者ID位于名为Patient_id)的列中:
    Patient_id = $P!{PATIENT_ID}
  3. 现在您需要在java代码中传入患者ID。因此,创建一个Map并将其添加到其中:

    Map<String, Object> parameters = new HashMap<String, Object>();
    parameters.put("PATIENT_ID", <the patient id value here>);
    

    然后您需要将其传递给您对fillReport方法的调用,因此请将其更改为:

    jasperPrint=JasperFillManager.fillReport(jasperReport,parameters,con);
    
  4. 就打印而言,JRViewer已经内置了打印功能。因此用户只需单击打印按钮即可。

答案 1 :(得分:1)

您应该在作为second argument to fillReport传递的地图中指定条件,例如:

Map<String, Serializable> conditions = new HashMap<String, Serializable>();
conditions.put("PATIENT_ID", 1);
JasperPrint jasperPrint = JasperfillManager.fillReport(jasperReport, conditions, con);

希望有所帮助,让我知道你是怎么过的。