我有一个JasperReports 6.3报告查询,它使用“开始日期”参数作为其WHERE
子句的一部分。参数可以为null,这实际上意味着“最早的日期”。
逻辑非常简单:
WHERE MyDateField > ($P{StartDate} == null ? DateTime(0L) : $P{StartDate})
但是当JasperReports尝试对数据库运行查询时,这会产生异常:
SQLServerException: The value is not set for the parameter number 3
作为旁注,了解如何让Jaspersoft Studio记录生成的SQL以协助调试将非常有用。
答案 0 :(得分:0)
无法在 queryString 处使用表达式。您应该创建另一个包含所需表达式的参数。
在您的情况下,代码将是这样的:
<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>
您可以在此处找到有关使用参数的更多信息: