我正在通过 iReport 4.5.0 创建带有 sql查询的 JR 报告。
我已经在Query中添加了参数。但我希望提供灵活性,以便用户可以传递参数或不能传递参数,以便相同的报告可以与我的Web应用程序一起使用。
任何人都可以告诉我如何使我的报告更加灵活,以便用户可以或不能传递参数。
我修改了 queryString ,如下所示:
SELECT columnA, ColumnB FROM Table WHERE Table."columnA" = $P!{}
但 iReport 无法生成报告。
答案 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}