2012-06-05 1 views
1

다음은 보고서에 포함 된 정적 쿼리를 사용하여 개발 한 JasperReport의 스 니펫입니다.JasperResports에서 결과 세트를 데이터 소스로 사용하는 방법은 무엇입니까?

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Report" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isFloatColumnFooter="true"> 
    <property name="ireport.zoom" value="1.0"/> 
    <property name="ireport.x" value="129"/> 
    <property name="ireport.y" value="0"/> 
    <parameter name="lp" class="java.lang.Integer"/> 
    <parameter name="all_price" class="java.lang.Integer"/> 
    <parameter name="all_amount" class="java.lang.Integer"/> 
    <parameter name="all_total_price" class="java.lang.Integer"/> 
    <queryString> 
      <![CDATA[SELECT sanaf_number,sanaf,sales_id,sales.sanaf_id,customer_name, price, total_price, addad, wahda, required_amount FROM sanaf,sales where (sales.export='0')and(sanaf.sanaf_id=sales.sanaf_id) limit $P{lp}]]> 
    </queryString> 
    <field name="sales_id" class="java.lang.Integer"/> 
    <field name="sanaf_id" class="java.lang.Integer"/> 

이제 정적 쿼리 대신 ResultSet을 사용해야합니다. 결과 집합은 현재 보고서에 포함 된 한 쿼리와 같은 필드가 포함되어있는 경우 나 보고서를 실행하는 데 사용하는 코드는, 당신은 다음 보고서 및 변경에서 queryString를 제거해야합니다 아래/

void showResports(){ 
    try{ 
    // OriginalExportOriginalExport 
    String reportName =""; 

    if(export.equalsIgnoreCase("1")){ 
     reportName = "OriginalExport.jasper"; 
    } else if(export.equalsIgnoreCase("0")){ 
     reportName = "ExportReport4.jasper"; 
    } 

    InputStream in =getClass().getResourceAsStream(reportName); 

    if(in==null|| connection==null) return ; 

    HashMap parameterMap = new HashMap(); 
    parameterMap.put("lp", new Integer(selectedNumber)); 

    if(export.equalsIgnoreCase("0")){ 
     int all_price=DatabaseManager.countTotalPriceForImport(selectedNumber); 
     int all_amount=DatabaseManager.countAmountForImport(selectedNumber); 
     int all_total_price=DatabaseManager.countTotalPrice(selectedNumber); 

     parameterMap.put("all_price",new Integer(all_price)); 
     parameterMap.put("all_amount",new Integer(all_amount)); 
     parameterMap.put("all_total_price",new Integer(all_total_price)); 
    } else if(export.equalsIgnoreCase("1")){ 
     int all_requiredAmount=DatabaseManager.countAllRequiredAmount(selectedNumber); 
     int all_given_amount=DatabaseManager.countAllGivenAmount(selectedNumber); 
     parameterMap.put("all_requiredAmount",new Integer(all_requiredAmount)); 
     parameterMap.put("all_given_amount",new Integer(all_given_amount)); 
    } 

    JasperPrint jp = JasperFillManager.fillReport(in, parameterMap, connection); 
    System.out.println("Object of Jasper Print created"); 

    JRViewer jv = new JRViewer(jp); 
    //Insert viewer to a JFrame to make it showable 
    JFrame jf = new JFrame(); 
    jf.getContentPane().add(jv); 
    jf.validate(); 
    jf.setVisible(true); 
    jf.setSize(new Dimension(800,600)); 
    jf.setLocation(300,100); 
    jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    }catch(Exception e){ 
    e.printStackTrace(); 
    } 
}// showReports 
+0

[데이터 소스 샘플] (http://jasperreports.sourceforge.net/sample.reference/datasource/index.html#datasources)을 볼 수 있습니다. –

답변

3

입니다 :

JasperFillManager.fillReport(in, parameterMap, connection); 

resultSet 데이터 세트 결과

JasperFillManager.fillReport(in, parameterMap, new JRResultSetDataSource(resultSet)); 

한다.

결과 집합의 필드 이름이나 필드가 다른 경우에만 문제가 발생합니다. 어떤 경우에는 보고서의 필드 이름도 조정해야합니다.