2

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

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

谁能告诉我如何使我的报告如此灵活,以便用户可以或不能传递参数。

我像这样修改了queryString

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

iReport无法生成报告。

4

3 回答 3

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

它与其他两个建议的答案没有根本不同。但是我发现这样很容易理解和维护。

于 2012-10-26T18:34:50.040 回答
1

您需要重组您的 SQL 查询来执行此操作。基本上将参数的默认值设置为 null 并编写您的查询,例如:

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

因此,本质上,如果为参数传入了一个值,则查询会将其与列进行比较,如果它为空,它只会评估为真,并跳过第二部分。

于 2012-10-26T17:14:54.790 回答
0

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

您只需要准备您的输入,如下所示:

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

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

Select columnA,ColumnB From Table $P!{whereClause}
于 2012-10-26T11:10:24.130 回答