如何在Jasper报表中正确地将SQL查询作为参数传递?

如何在Jasper报表中正确地将SQL查询作为参数传递?,sql,parameters,jasper-reports,Sql,Parameters,Jasper Reports,我已经研究了与此主题相关的所有其他问题,并遵循了其中提到的所有步骤,但是在尝试将整个SQL语句作为参数传递时仍然会出错 这是我的SQLQuery参数: <parameter name="SQLTag" class="java.lang.String"> <defaultValueExpression><![CDATA["SELECT * FROM REPORT_VER WHERE TAG BETWEEN $P{Von} AND $P{Bis}"]]>

我已经研究了与此主题相关的所有其他问题,并遵循了其中提到的所有步骤,但是在尝试将整个SQL语句作为参数传递时仍然会出错

这是我的SQLQuery参数:

<parameter name="SQLTag" class="java.lang.String">
    <defaultValueExpression><![CDATA["SELECT * FROM REPORT_VER WHERE TAG BETWEEN  $P{Von}  AND $P{Bis}"]]></defaultValueExpression>
</parameter>

如果在defaultValueExpression中使用参数,则应将其作为公共Java变量进行操作

例如:

<parameter name="fieldFilter" class="java.lang.String">
    <defaultValueExpression><![CDATA["someValue"]]></defaultValueExpression>
</parameter>
<parameter name="query" class="java.lang.String">
    <defaultValueExpression><![CDATA["SELECT * FROM some_table WHERE some_field = '" + $P{fieldFilter} + "'"]]></defaultValueExpression>
</parameter>
<queryString>
    <![CDATA[$P!{query}]]>
</queryString>

或者像这样:

<parameter name="intFieldFilter" class="java.lang.Integer">
    <defaultValueExpression><![CDATA[2017]]></defaultValueExpression>
</parameter>
<parameter name="strFieldFilter" class="java.lang.String">
    <defaultValueExpression><![CDATA["someValue"]]></defaultValueExpression>
</parameter>
<parameter name="query" class="java.lang.String">
    <defaultValueExpression><![CDATA[String.format("SELECT * FROM some_table WHERE some_field = '%1$s' AND trunc(date_field, 'yyyy') = trunc(to_date(%2$d, 'yyyy'), 'yyyy')", $P{strFieldFilter}, $P{intFieldFilter})]]></defaultValueExpression>
</parameter>
<queryString>
    <![CDATA[$P!{query}]]>
</queryString>


是的,我已经将参数更改为
仍然得到相同的结果…
$P{Von}
$P{Bis}
都是
java.util.Date
,是的,它工作得非常好,不带参数直接传递到queryString中。这是一个带常量(不带参数)的有效sql查询?发布示例,请
“从报告中选择*在'10.05.2015'和'20.05.2015'之间的位置标记”
这意味着您需要将日期(Date)格式化为字符串(例如,借助SimpleDataFormat)
<parameter name="intFieldFilter" class="java.lang.Integer">
    <defaultValueExpression><![CDATA[2017]]></defaultValueExpression>
</parameter>
<parameter name="strFieldFilter" class="java.lang.String">
    <defaultValueExpression><![CDATA["someValue"]]></defaultValueExpression>
</parameter>
<parameter name="query" class="java.lang.String">
    <defaultValueExpression><![CDATA[String.format("SELECT * FROM some_table WHERE some_field = '%1$s' AND trunc(date_field, 'yyyy') = trunc(to_date(%2$d, 'yyyy'), 'yyyy')", $P{strFieldFilter}, $P{intFieldFilter})]]></defaultValueExpression>
</parameter>
<queryString>
    <![CDATA[$P!{query}]]>
</queryString>