Jasper Report根据不同的动态值运行不同的查询

时间:2014-02-27 07:22:01

标签: jasper-reports jasperserver

我有三个不同的查询,并希望按照jasper report中的值get运行它们。查询是用Jrxml文件本身编写的。如何根据不同的动态值运行不同的查询。

喜欢(这只是一个sudo代码)

 If($(a) == "Germany")

   run query 1
 If($(a) == "India")
   run query 2

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:3)

mainReport.jrxml

中定义参数$P{a}

使子报告 subreport1.jrxml (query1), subreport2.jrxml (query2)

将subreport1和subreport2放入mainReport.jrxml的标题区域

在mainReport中使用PrintWhenExpression获取子报告的属性(Window-> Properties)

在mainReport中为subreport1设置PrintWhenExpression:$P{a}.equals("Germany")
在mainReport中为subreport2设置PrintWhenExpression:$P{a}.equals("India")

$P{a}从您的应用程序传递到mainReport

答案 1 :(得分:2)

您可以尝试使用DynamicReports。这是一个基于JasperReports的库,让我们直接从你的java代码构建你的报告。 这是一个例子Dynamic Reports 有一个.setDataSource()方法,它可以接受一个字符串+一个连接对象。基于一些小逻辑,您可以在那里设置查询。 .setDataSource()被重载,它甚至可以获取ResultSet对象。因此,您甚至可以使用Statement / PreparedStatement对象传递不同的查询和值,然后将其结果作为报告的源传递。 希望它有所帮助!

P.S:该示例使用maven依赖项,但您也可以下载.jar并将其添加到类路径中以使其正常工作