Jasper报告:如何从Java程序传递多个SQL查询

Jasper报告:如何从Java程序传递多个SQL查询,java,jasper-reports,Java,Jasper Reports,我使用iReport工具构建了一个Jasper报告,其中我注册了两个数据集,一个用于在表中处理数据,另一个用于显示图表 使用该工具成功地进行了配置,当我看到报告时,它为我提供了正确的数据。然而,当我试图从Java程序中调用查询时,我却迷失了方向。我该如何处理这件事?我只能传递一个带有示例源代码的查询,示例源代码是我的程序 我正在使用的示例源代码: Connection conn = getConnection("172.16.88.171", "1522", "orcl"

我使用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);
这只传递一个查询;如何传递多个查询


谢谢。

您只需将查询完全存储在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());
} 
试试看{
字符串shopName=jCombox1.getSelectedItem().toString();
String actionCode=jCombox2.getSelectedItem().toString();
HashMap=newHashMap();
地图放置(“店名”,店名);
map.put(“动作码”,动作码);
URL reportFileURL=getClass().getResource(“../ireps/AccessCounter.jrxml”);
File reportFile=新文件(reportFileURL.toURI());
JasperDesign JasperDesign=JRXmlLoader.load(报告文件);
JasperReport-JasperReport=JasperCompileManager.compileReport(jasperDesign);
JasperPrint=JasperFillManager.fillReport(jaspereport,map,con);
JasperViewer jv=新JasperViewer(jasperPrint);
JDialog viewer=newjdialog(此“批处理报告”,true);
viewer.setBounds(jv.getBounds());
viewer.getContentPane().add(jv.getContentPane());
viewer.setresizeable(true);
viewer.setIconImage(jv.getIconImage());
viewer.setVisible(true);
}捕获(JR异常exc){
System.out.println(exc.getMessage());
}捕获(URISyntaxException exs){
System.out.println(exs.getMessage());
} 

感谢您的宝贵意见。我最近在探索Jasper reports时遇到了这个问题。我将尝试在该地区进行更多的探索,您的这一建议将对我的进一步发展大有裨益。再次感谢。