2012-06-05 30 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而不是静态查询。我用它来执行报告中的代码如下/

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

如果结果集包含相同的字段,你目前已经嵌入在报告的查询,则需要从报告中,然后更改删除queryString

JasperFillManager.fillReport(in, parameterMap, connection); 

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

其中resultSet是结果与数据集。

唯一的问题是如果结果集中字段的名称不同,或者字段不同。在这种情况下,您还需要调整报告中的字段名称。

相关问题