Dynamic JRXML中的动态查询字符串

Dynamic JRXML中的动态查询字符串,dynamic,jasper-reports,query-string,report,Dynamic,Jasper Reports,Query String,Report,我正在尝试构建一个足够智能的报表,根据某种类型的输入参数稍微修改它的sql查询 例如,如果特殊的修改参数值为“1”,它将在select中添加一个字段,并将GROUPBY子句添加到查询中 我已经研究了java表达式,但jrxml的queryString标记似乎不支持它们。还尝试创建一个包含java表达式的变量,并在queryString标记中使用该变量。。。那也不行 现在我在想,也许有一个具有所有这些逻辑的存储过程,只需要jrxml调用带有修改输入参数的存储过程,但是我正在处理的项目似乎没有太多的

我正在尝试构建一个足够智能的报表,根据某种类型的输入参数稍微修改它的sql查询

例如,如果特殊的修改参数值为“1”,它将在select中添加一个字段,并将GROUPBY子句添加到查询中

我已经研究了java表达式,但jrxml的queryString标记似乎不支持它们。还尝试创建一个包含java表达式的变量,并在queryString标记中使用该变量。。。那也不行

现在我在想,也许有一个具有所有这些逻辑的存储过程,只需要jrxml调用带有修改输入参数的存储过程,但是我正在处理的项目似乎没有太多的存储过程,所以我想在走这条路之前看看是否还有其他解决方案

谢谢你的帮助



谢谢你们的帮助,非常感谢。然而,我找到了另一种方法,并将其发布以供参考:

我使用存储过程完成了这项工作,这些存储过程对于这类内容来说非常合适。否则,您可以切换到Java。只需从数据库中获取数据,并根据用户提供的参数对其进行过滤、分组,然后作为bean的集合发送到Jasper报告,该报告将进行渲染。

JasperDesign实际上允许您修改jrxml文档的部分内容。因此,假设您有一个“reports”包,您可以在其中存储手动或iReport等工具生成的报告。只要您的查询是在标记
中定义的,以下操作将允许您动态更改查询:

试试看{
字符串文件名=getClass().getClassLoader().getResource(“com/foo/myproject/reports/TestReport.jrxml”).getFile();
File theFile=新文件(文件名);
JasperDesign JasperDesign=JRXmlLoader.load(文件);
//构建新查询
字符串theQuery=“SLECT*FROM myTable WHERE…”;
//更新数据查询
JRDesignQuery newQuery=新JRDesignQuery();
newQuery.setText(theQuery);
setQuery(newQuery);
JasperReport-JasperReport=JasperCompileManager.compileReport(jasperDesign);
连接conn=MyDatabaseClass.getConnection();
JasperPrint JasperPrint=JasperFillManager.fillReport(jaspereport,null,conn);
JasperViewer.viewReport(jasperPrint);
}捕获(例外情况除外){
String connectMsg=“无法创建报告”+ex.getMessage()+“”+ex.getLocalizedMessage();
System.out.println(connectMsg);
}
使用类似的方法,您可以创建类的成员变量来保存新查询,并使用用户所需的任何约束来构建它。然后在查看时只需修改设计


-Jeff

JasperDesign帮助我解决了在Jrxml文件上构建动态查询的问题

为了构建动态SQL,我使用(Google代码)来动态构建SQL。
谢谢jeff

我其实在找其他东西,但你的这篇文章帮了我很多忙,我只是想补充一下,你也可以通过jasperDesign.getQuery().getText()获得原始查询(如果你想更新的话);