我正在通过iReport 4.5.0创建带有嵌入式sql 查询的JR报告。
我已经在 Query 中添加了参数。但我想提供灵活性,以便用户可以传递参数或不能传递参数,以便相同的报告可以与我的 Web 应用程序一起使用。
谁能告诉我如何使我的报告如此灵活,以便用户可以或不能传递参数。
我像这样修改了queryString:
SELECT columnA, ColumnB FROM Table WHERE Table."columnA" = $P!{}
但iReport无法生成报告。
我正在通过iReport 4.5.0创建带有嵌入式sql 查询的JR报告。
我已经在 Query 中添加了参数。但我想提供灵活性,以便用户可以传递参数或不能传递参数,以便相同的报告可以与我的 Web 应用程序一起使用。
谁能告诉我如何使我的报告如此灵活,以便用户可以或不能传递参数。
我像这样修改了queryString:
SELECT columnA, ColumnB FROM Table WHERE Table."columnA" = $P!{}
但iReport无法生成报告。
我通常遵循这种模式:像你一样定义 $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
它与其他两个建议的答案没有根本不同。但是我发现这样很容易理解和维护。
您需要重组您的 SQL 查询来执行此操作。基本上将参数的默认值设置为 null 并编写您的查询,例如:
Select columnA,ColumnB From Table Where ($P!{} IS NULL OR Table."columnA" = $P!{})
因此,本质上,如果为参数传入了一个值,则查询会将其与列进行比较,如果它为空,它只会评估为真,并跳过第二部分。
您可以尝试将整个 where 子句作为参数传递。这样,如果没有给出参数,整个子句将被省略,查询仍然有效。
您只需要准备您的输入,如下所示:
String whereClause = null
if (inputString != null && inputString != ""){
whereClause = "Where Table.\"columnA\" = \"" + inputString + "\"";
}
将其作为参数传递给您的报告,然后将查询更改为:
Select columnA,ColumnB From Table $P!{whereClause}