在queryString

时间:2016-11-08 16:29:27

标签: jasper-reports

我有一个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以协助调试将非常有用。

1 个答案:

答案 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>

您可以在此处找到有关使用参数的更多信息: