我现在正在做一个诊所项目,我需要打印该项目的特殊报告,例如特定患者的私人信息。

因此,我确实为我的项目工作了数据库,并在数据库和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();

最佳答案

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

这是您需要遵循的步骤:

  • 在您的报告中创建一个名为PATIENT_ID的新参数,类型为Integer(或可能更合适的方法,具体取决于
    您的数据库中输入患者ID的字段类型)。
  • 在中编辑查询以包含WHERE子句(或附加到
    现有的WHERE子句使用和AND)以下内容(假设
    患者ID在名为Patient_id的列中:Patient_id = $P!{PATIENT_ID}
  • 现在您需要在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);
    

  • 就打印而言,JRViewer已经内置了打印功能。因此,用户只需要单击打印按钮。

    07-27 13:50