在queryString中使用三元表达式
问题描述:
我有一个JasperReports 6.3报表查询,它使用“开始日期”参数作为其WHERE
子句的一部分。参数可能为空,这实际上意味着“最早的日期”。在queryString中使用三元表达式
的逻辑非常简单:
WHERE MyDateField > ($P{StartDate} == null ? DateTime(0L) : $P{StartDate})
但当JasperReports的尝试运行对数据库的查询这将产生一个例外:
SQLServerException: The value is not set for the parameter number 3
作为一个侧面说明,这将是有助于弄清楚如何让Jaspersoft Studio记录生成的SQL,以帮助进行调试。
答
不可能在查询字符串上使用表达式。您应该创建另一个包含您需要的表达式的参数。
在你的情况下,代码将是这样的:
<parameter name="StartDate" class="org.joda.time.DateTime"/>
...
<parameter name="dateFilter" class="org.joda.time.DateTime">
<defaultValueExpression><![CDATA[$P{StartDate} == null ? DateTime(0L) : $P{StartDate}]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT * FROM sometable WHERE MyDateField > $P{dateFilter}]]>
</queryString>
您可以在此处找到有关使用参数的详细信息: