2012-12-12 87 views
3

我現在正在做一個診所項目,我需要爲項目打印特殊報告,例如針對特定患者的私人信息。如何使用JasperReports從表中查看一條記錄?

因此,我沒有爲我的項目工作數據庫,並在數據庫和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(); 

回答

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); 
    

就打印而言,JRViewer已經內置打印功能。所以用戶只需要點擊打印按鈕。

+0

非常感謝你的問題解決 – mhmad

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); 

希望幫助,讓我知道你上車。

+0

我很抱歉,不解決問題 – mhmad

+0

@mhmad什麼是輸出? – hd1

相關問題