2011-06-27 10 views
1

私のアプリケーションからレポートを生成する必要があります。 最初にユーザーは自分の検索条件を選択し、次に彼の選択肢を検証します(検索条件:グラフの種類、グループの種類など) 私のレポートはどうやって作成できますか? 私の考えは次のとおりです。レポートを動的に入力する方法は?

1-DECLAR文字列SQL

2 - ユーザーは、私はSQL要求 などに彼の選択をCONCATます検索条件をチェックし

文字列のSQL。 文字列select = "select"; String from = "from"; 文字列where; = "where" 文字列と= "および"; 文字列GroupBY = "グループ化";

彼は数を計算選ぶ... GROUPBY .... 私はCONCATます: マッピングJPAを使用して+ "COUNT(*)" など

ALSO

I'amを/選択=選択します私のコードからデータベースへの接続を使用しないようにする(私は明示的にcon =接続....を宣言しないことを意味する)ので、メソッドに渡す必要がある.fillReportToFile、runReportToPdfStreamなど

+0

ここでは回答が少なすぎます。しかし、私が言うことは、これまでのところ、SQLインジェクション攻撃のレシピ(http://en.wikipedia.org/wiki/SQL_injection)のように聞こえるということです。 –

+0

ユーザーができるクエリの種類を把握し、可能な限り多くのクエリをハードコードするのはなぜでしょうか?たとえば、String count_query = "select count(1)from"を指定し、count_query + "whatever_table_the_user_wants"を処理し、他のクエリと同様に処理できますか?また、これが内部アプリケーションでない場合は、明らかにSQLインジェクションから保護するために構文解析を行いたいということも付け加えておきます。 –

+0

それは単なるアイデアです:) – rym

答えて

0

I一般的にはJRDataSourceを実装し、レポートには全くSQLを含めないでください。そうすれば、レポート生成のためのパラメータを取得し、その結果を制御された方法でJasperレポートに直接供給することができます。

サブレポートが埋め込まれたレポートを生成する場合は、引き続き接続を提供する必要があります。

/* Where datasource is your data supplier */ 
JasperFillManager.fillReport(report, parameterMap, dataSource); 
+0

Javaオブジェクトをデータソースとして使用する必要があります。ネットで検索しましたが、良い例が見つかりませんでした。( – rym

+0

レポートを実行するときカスタムSQLを使用してJDBCクエリ(またはHibernateクエリ)を実行し、JRDataSourceを実装するクラスのインスタンスを作成し、結果セットをコンストラクタに渡します。次に、結果セットを使用してクラス内に2つのメソッドを実装し、上記のようなfillReportメソッドです。本当に簡単です。 – Chris

関連する問題