【问题标题】:Jasper Report run different query based on different dynamic valuesJasper Report 根据不同的动态值运行不同的查询
【发布时间】:2014-02-27 07:22:01
【问题描述】:

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

点赞(只是一个sudo代码)

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

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

任何帮助将不胜感激。

【问题讨论】:

  • query1和query2返回的字段是否不同?
  • 是的,实际上是字段,并且根据执行的字段查询的值不同。

标签: jasper-reports jasperserver


【解决方案1】:

ma​​inReport.jrxml

中定义参数$P{a}

制作子报表subreport1.jrxml (query1), subreport2.jrxml (query2)

将 subreport1 和 subreport2 放入 mainReport.jrxml 的 Title

在mainReport中使用PrintWhenExpression作为子报表的属性(Window->Properties)

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

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

【讨论】:

  • 我有一点疑问。这是否意味着要执行 N 个这样的查询,我们必须创建新的子报告??..
  • 另一种方法是使用子数据集。 stackoverflow.com/questions/7482412/… 但是子数据集有一些限制,AFAIR
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多