2012-12-12 2 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 (또는 환자에 대한 데이터베이스의 필드 유형에 따라 더 적절한 가능성이 뭔가 신분증).
  2. 편집에 쿼리는 WHERE 절 (또는 사용 WHERE 절을 기존 AND에 추가) 다음 (가정 환자 ID가 Patient_id라는 칼럼에 일) : 이제 당신이 필요로하는
    Patient_id = $P!{PATIENT_ID}
  3. 귀하의 자바 코드에서 환자 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

관련 문제