我正在尝试构建一个足够聪明的报告,根据某种输入参数略微修改其sql查询.
例如,如果该特殊修改参数值为"1",则会在select中添加一个字段,并将group by子句添加到查询中.
我查看了java表达式,但jrxml的queryString标记似乎不支持它们.还尝试创建一个包含java表达式的变量,并在queryString标记中使用该变量...这也不起作用!
现在我想可能有一个存储过程与所有逻辑,只是让jrxml使用修改输入参数调用该存储过程,但我正在处理的项目似乎没有很多存储proc,所以在我走这条路之前,我想看看是否还有其他解决方案.
谢谢你的帮助.
谢谢你们的帮助,非常感谢你们.然而,我找到了另一种方法,并将其发布以供参考:这里
JasperDesign实际上允许您修改jrxml文档的部分内容.因此,假设您有一个"报告"软件包,您可以手动或通过iReport等工具存储您的报告.只要您的查询在标记中定义,
以下内容将允许您动态更改查询:
try {
String fileName = getClass().getClassLoader().getResource("com/foo/myproject/reports/TestReport.jrxml").getFile();
File theFile = new File(fileName);
JasperDesign jasperDesign = JRXmlLoader.load(theFile);
//Build a new query
String theQuery = "SLECT * FROM myTable WHERE ...";
// update the data query
JRDesignQuery newQuery = new JRDesignQuery();
newQuery.setText(theQuery);
jasperDesign.setQuery(newQuery);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
Connection conn = MyDatabaseClass.getConnection();
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, conn);
JasperViewer.viewReport(jasperPrint);
} catch (Exception ex) {
String connectMsg = "Could not create the report " + ex.getMessage() + " " + ex.getLocalizedMessage();
System.out.println(connectMsg);
}
通过这样的方法,您可以创建一个包含新查询的类的成员变量,并使用所需的任何用户约束来构建它.然后在查看时只需修改设计.
-Jeff