借助Java代码在JasperReports中添加FilterExpression

借助Java代码在JasperReports中添加FilterExpression,java,jasper-reports,Java,Jasper Reports,我正在用Java开发一个工具,可以在JasperReports中实现一些自动化(自动打印、设置参数等),我主要使用JasperReport库。现在我必须使用Java代码设置过滤器表达式。我知道如何准备参数,我是这样做的: Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("filter", "where name like '%.'"); 如果有这样一种简单的方法

我正在用Java开发一个工具,可以在JasperReports中实现一些自动化(自动打印、设置参数等),我主要使用JasperReport库。现在我必须使用Java代码设置过滤器表达式。我知道如何准备参数,我是这样做的:

Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("filter", "where name like '%.'");

如果有这样一种简单的方法来修改参数,我想也有类似的方法来修改过滤器表达式。我已经搜索了很长时间,但什么也没找到。

只能在
JasperDesign
对象中设置/更改报表筛选器表达式(或任何其他表达式)(请参见
setFilterExpression
方法)。必须将
JasperDesign
对象重新编译为
JasperReport


过滤器表达式的另一种替代方法是
JRParameter.filter
内置参数,它将
net.sf.jasperreports.engine.DatasetFilter
实例作为值。JasperReports包括一个名为
FieldFilter
DatasetFilter
实现,该实现在内部用于交互式筛选,但它可能不适合您的需要,在这种情况下,您需要编写自己的
DatasetFilter
实现。

因为您使用的是数据库连接,我找不到比在查询中过滤更好的方法

这限制了需要从数据库传输和迭代的数据,从而提高了性能并减少了内存使用

注意,您正在使用
$p!传递整个查询!()
,我可能更愿意使用prepared语句只传递值,并使用
$P()
在jasper report expression中设置查询以了解差异,请参见


如果您无法在查询中进行筛选,另一种解决方案是将数据加载到bean中,对其进行筛选,然后将生成的
列表作为
传递。我需要使用Java代码将新的筛选表达式添加到我的Jasper报告中。
-这是什么意思?您可以手动将筛选表达式添加到报告中。例如:
$F{NAME}.contains(“USP”)|$F{NAME}.contains(“O”)
。在报告的源代码中,它看起来是这样的:
我的工作是在java代码中设置这些条件。你是在谈论基于JavaBean的数据源吗?确切地说,我是指JasperReport库。我想,如果我可以使用这个库设置参数,也可以选择设置过滤器表达式,但我不知道如何设置。任何方法都是好的,但前提是可以自动完成(使用代码),您可以过滤集合,例如借助Guava:或流API:
JasperPrint pdf = JasperFillManager.fillReport(jasperReport, parameters, connection);