2

iReport4.5.0による埋め込みSQLクエリを使用してJRレポートを作成しています。

クエリにパラメータを追加しました。ただし、ユーザーがパラメーターを渡すことができるように、またはパラメーターを渡すことができないように柔軟性を持たせて、同じレポートが私の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

それは他の2つの提案された答えと根本的に違いはありません。しかし、私はこのように理解し、維持するのは簡単だと思います。

于 2012-10-26T18:34:50.040 に答える
1

これを行うには、SQLクエリを再構築する必要があります。基本的に、パラメータのデフォルト値をnullに設定し、クエリを次のように記述します。

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

したがって、基本的に、パラメータに値が渡された場合、クエリはその値を列と比較し、nullの場合は、trueと評価され、2番目の部分をスキップします。

于 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 に答える