2011-01-15 10 views
3

私はこの問題をしばらく解決しており、助けてくれることを願っています。すべてを表示するにはJasperReports nullパラメータ値が必要です

私はiReportでレポートを作成しましたが、一部のパラメータがnullであってもレポートを埋めたいと思います。ここで

は私が

SELECT 
    evento."titulo" AS evento_titulo, 
    evento."data_inicio_realizacao" AS evento_data_inicio_realizacao, 
    evento."data_fim_realizacao" AS evento_data_fim_realizacao, 
    evento."id" AS evento_id 
FROM 
    "public"."evento" evento 
WHERE 
    evento."id" = $P{eventoid} OR 
    evento."data_inicio_realizacao" BETWEEN $P{data1} AND $P{data2} 

持っているものだ私は、私がnull(またはIDの場合に0の値を持つ)これらのパラメータを残せば、私はすべての値を取得したい、つまり、WHERE句はオプションになりたいです空白のレポートの代わりに。

可能ですか?ある人が$ P {WHERE_CLAUSE}を作成し、where句をその値として渡しているのを見つけましたが、それは私にとってはうまくいかなかったのです。

答えて

2

さて、私はちょっと試して、$ P {}パラメータの中にWHERE句全体を渡して動作させる方法を考え出しました。

私は単純に全体のWHERE句と、これを置く削除:私はそこに単一のパラメータを入れて、三つのパラメータ$ P {eventoid}を削除し、$ P {DATA1}と$ P {DATA2

$P!{whereClause} 

を}をレポートから削除します。

私はSpringのMVCとクラスコントローラの中で、そのページのPOSTリクエストマッピングの下で​​whereClauseというString変数を追加し、その値を "WHERE 1 = 1"に設定しました。 )好む:

String whereClause = "WHERE 1=1"; 

if (relIndice.getEventoId() != 0) { 
    whereClause += " AND evento.id = " + relIndice.getEventoId().toString(); 
} 

if (relIndice.getData1() != null) { 
    whereClause += " AND evento.data_inicio_realizacao >= '" + relIndice.getData1().toString() + "'"; 
} 

if (relIndice.getData2() != null) { 
whereClause += " AND evento.data_inicio_realizacao <= '" + relIndice.getData2().toString() + "'"; 
} 

whereClause += " ORDER BY evento.data_inicio_realizacao"; 

whereClause変数の初期値を設定した後、私が作っ3 IF文、SQLで私がWHEREステートメントに含めるフィールドのいずれかの各、。

1 = 1は、とにかく実行するWHERE」、blankspaceは清潔で働い構文を作るために、前に必要とされているので

そして、最後に、私はとにかく実行されますORDER BY句を追加しました そして、それはあなたのパラメータの値は、あなたが使用したいゲッターから得られる値になります。

私の場合、値は0または0のままにすることができます(eventoIdの場合、 int)、そして、そのテーブルのすべてのレコードを持っています。なぜなら、SELECTステートメントはWHERE句を参照しないからです...コーズは存在しません!

ありがとう!

+0

これは... –

0

EVENTO。$ P {DATA1}と$ P {DATA2}

この

( (EVENTOのために置き換えてみてください。 "data_inicio_realizacao"> = $ P BETWEEN "data_inicio_realizacao" {DATA1}または$ P {DATA1}がヌルである) 又は(EVENTO。 "data_inicio_realizacao" < = $ P {DATA2}または$ P {DATA2}がヌルである) )

4

これは、今実行している動的SQLの代わりに行うことができます。

select xxx 
from <table> 
where $P{eventoid} is null or evento."id" = $P{eventoid} 

、このような古いポストに返信して申し訳ありませんが...

+3

その決して遅すぎるが、投稿に返信するためにあなたが持っていないとき。..動的SQLを使用する必要があります。ご協力いただきありがとうございます。 –

関連する問題