[英]Jasper Reports: How to pass multiple SQL queries from a Java Program
我使用iReport工具构造了一个Jasper Report,在其中我注册了两个数据集,一个用于对表中的数据进行插补,另一个用于显示图表。
使用该工具成功完成了配置,当我看到报告时,它为我提供了正确的数据。 但是,当我尝试从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());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.