【问题标题】:Jasper Reports: How to pass multiple SQL queries from a Java ProgramJasper Reports:如何从 Java 程序传递多个 SQL 查询
【发布时间】:2011-01-11 12:06:00
【问题描述】:

我使用 iReport 工具构建了一个 Jasper 报告,其中我注册了两个数据集,一个用于填充表格中的数据,另一个用于显示图表。

使用该工具配置成功,当我看到报告时,它为我提供了正确的数据。当我尝试从 Java 程序调用查询时,我迷失了方向。我该如何处理这个?我只能使用作为程序的示例源代码传递一个查询。

我正在使用的示例源代码:

            Connection conn = getConnection("172.16.88.171", "1522", "orcl", "audi", "audi");
        System.out.println("Got jdbc connection...");
        Statement stmt = conn.createStatement();
        ResultSet rset = stmt.executeQuery("SELECT DB_USER, OS_USER, USERHOST, STATEMENT_TYPE, SQL_TEXT FROM DBA_FGA_AUDIT_TRAIL");


        InputStream input = new FileInputStream(new File("E:\\jasper_reports\\sampleADPTemplate_chart.jrxml"));
        JasperDesign design = JRXmlLoader.load(input);
        JasperReport report = JasperCompileManager.compileReport(design);

        JasperPrint print = JasperFillManager.fillReport(report, new HashMap(), conn);

        OutputStream output = new FileOutputStream(new File("E:\\jasper_reports\\JasperReporttoPDF.pdf"));
        JasperExportManager.exportReportToPdfStream(print, output);

这只会传递一个查询;我该如何传递多个查询。

谢谢。

【问题讨论】:

    标签: java jasper-reports


    【解决方案1】:

    您只需将查询完全存储在 iReport jrxml 文件中。为了使您的报告灵活,请使用参数。这样您就允许用户在运行时定义所需的值。

    在这里您可以看到一个示例,该示例从两个组合框中获取两个值,将它们添加到 HashMap 并将映射传递给 iReport。这些参数,例如“storeName”和“actionCode”,用于指定存储在 iReport 中的查询的值。

    您可以在子报告中进行多个查询。

    try {
    
        String shopName = jComboBox1.getSelectedItem().toString();
        String actionCode = jComboBox2.getSelectedItem().toString();
    
        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("storeName", shopName);
        map.put("actionCode", actionCode);
    
        URL reportFileURL = getClass().getResource("../ireps/AccessCounter.jrxml");
        File reportFile = new File(reportFileURL.toURI());
        JasperDesign jasperDesign = JRXmlLoader.load(reportFile);
        JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, con);
    
        JasperViewer jv = new JasperViewer(jasperPrint);
        JDialog viewer = new JDialog(this, "Batch Report", true);
        viewer.setBounds(jv.getBounds());
        viewer.getContentPane().add(jv.getContentPane());
        viewer.setResizable(true);
        viewer.setIconImage(jv.getIconImage());
        viewer.setVisible(true);
    
    } catch (JRException exc) {
       System.out.println(exc.getMessage());
    } catch (URISyntaxException exs) {
       System.out.println(exs.getMessage());
    } 
    

    【讨论】:

    • 感谢您的意见。我在新探索 Jasper 报告时遇到了这个问题。我将尝试在该地区进行更多探索,您的这个提示将对我进一步发展有很大帮助。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多