带有SQL字符串的JasperStudio参数

时间:2015-01-22 17:05:10

标签: sql parameters jasper-reports

我正在尝试在JasperStudio中创建一个动态SQL查询。

从表中选择*,其中user = 1  AND RISKS =' R'

当某个参数设置为TRUE(或1)时,条件应仅在数据库上执行。 如果此参数为FALSE,则查询应忽略条件。 我想到了以下几点:

我使用条件作为自己的参数,只需设置它' 1',当参数为FALSE时,这两个语句将是:

1)从表中选择*,其中user = 1  AND RISKS =' R'

2)从表中选择*,其中user = 1  AND 1 = 1

但不知何故,这不起作用。有一个更好的方法吗?由于我正在访问两个不同的数据库,因此将设置TRUE-FALSE参数,并且RISKS列仅存在于一个表中(无法添加该列)。

1 个答案:

答案 0 :(得分:1)

这可以使用查询块(当您放入查询$!P{PARAM_NAME}而不是$P{PARAM_NAME}时)来完成。 请看下面的示例:

  1. 声明参数:
  2. a)UserId参数,您将传递给查询:

    <parameter name="UserID" class="java.lang.Integer"/>
    

    b)UseRiskParam - 是您的“某些参数,可以是真或假”

    <parameter name="UseRiskParam" class="java.lang.Boolean"/>
    

    c)风险参数 - 如果UseRiskParam = true,它将应用于RISKS列

    <parameter name="Risks" class="java.lang.Integer"/>
    

    d)现在我定义了生成附加条件的参数。应隐藏此参数。它根据UseRiskParam的值生成附加条件。如果是真的,条件看起来像“RISKS = 1”,否则它将是“1 = 1”

    <parameter name="RisksCondition" class="java.lang.Integer" isForPrompting="false">
        <defaultValueExpression><![CDATA[$P{UseRiskParam} ? "RISKS = " + ($P{Risks} == null ? "null" : $P{Risks}.toString()) : " 1 = 1"]]></defaultValueExpression>
    </parameter>
    
    1. 报告查询
    2. <queryString>
        <![CDATA[select * from table where user = $P{UserID} and $P!{RisksCondition}]]>
      </queryString>
      

      因为$P!{RisksCondition}!一起传递,所以它作为sql语句传递,但不作为查询参数传递。

      希望此信息有用