如何将可选参数传递给报表?

时间:2012-10-26 10:38:43

标签: java jasper-reports

我正在通过 iReport 4.5.0 创建带有 sql查询 JR 报告。

我已经在Query中添加了参数。但我希望提供灵活性,以便用户可以传递参数或不能传递参数,以便相同的报告可以与我的Web应用程序一起使用。

任何人都可以告诉我如何使我的报告更加灵活,以便用户可以或不能传递参数。

我修改了 queryString ,如下所示:

SELECT columnA, ColumnB FROM Table WHERE Table."columnA" = $P!{}

iReport 无法生成报告。

3 个答案:

答案 0 :(得分:6)

我通常遵循这种模式:像你一样定义$ P {MyParam}。然后添加$ P {MyParam_SQL},其默认值如下:

$P{MyParam} == null ? "1=1" : "columnA = '" + $P{MyParam} + "'"

报告中的SQL是这样的:

SELECT columnA, ColumnB 
FROM table 
WHERE 
  some_filters
  AND $P!{MyParam_SQL}
  AND some_other_stuff

与其他两个建议的答案没有根本区别。但我觉得这很容易理解和维护。

答案 1 :(得分:1)

您需要重新构建SQL查询才能执行此操作。基本上将参数的默认值设置为null,并将查询写为:

Select columnA,ColumnB From Table Where ($P!{} IS NULL OR Table."columnA" = $P!{})

所以基本上如果为参数传入一个值,查询会将它与列进行比较,如果为null,则只评估为true,并跳过第二部分。

答案 2 :(得分:0)

您可以尝试将整个where子句作为参数传递。这样,如果没有给出参数,则省略整个子句,查询仍然有效。

您只需准备这样的输入:

String whereClause = null
if (inputString != null && inputString != ""){
    whereClause = "Where Table.\"columnA\" = \"" + inputString + "\"";
}

将其作为参数传递给您的报告,然后将查询更改为:

Select columnA,ColumnB From Table $P!{whereClause}