0

ある種の入力パラメーターに基づいて SQL クエリをわずかに変更するのに十分スマートなレポートを作成しようとしています。

たとえば、その特別な変更パラメータ値が「1」の場合、select にフィールドが追加され、group by 句がクエリに追加されます。

Java 式を調べましたが、jrxml の queryString タグではサポートされていないようです。また、java 式を含む変数を作成し、その変数を queryString タグで使用しようとしましたが、これもうまくいきませんでした。

今、私は多分そのすべてのロジックを持つストアド プロシージャを持っていて、入力パラメーターを変更してそのストアド プロシージャを呼び出す jrxml を持つことを考えていますが、私が取り組んでいるプロジェクトには多くのものが保存されているようには見えませんprocなので、その道をたどる前に他の解決策があるかどうかを確認したいと思います.

ご協力いただきありがとうございます。


ご協力いただきありがとうございます。ただし、別の方法を見つけて、情報のために投稿しました:こちら

4

3 に答える 3

8

JasperDesign では、実際に jrxml ドキュメントの一部を変更できます。たとえば、手動または iReport などのツールで作成したレポートを保存するパッケージ「レポート」があるとします。タグでクエリが定義されている限り<queryString>、次のように動作し、その場でクエリを変更できます。

try {
    String fileName = getClass().getClassLoader().getResource("com/foo/myproject/reports/TestReport.jrxml").getFile();
    File theFile = new File(fileName);
    JasperDesign jasperDesign = JRXmlLoader.load(theFile);

    //Build a new query
    String theQuery = "SLECT * FROM myTable WHERE ...";

    // update the data query
    JRDesignQuery newQuery = new JRDesignQuery();
    newQuery.setText(theQuery);
    jasperDesign.setQuery(newQuery);

    JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
    Connection conn = MyDatabaseClass.getConnection();
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, conn);
    JasperViewer.viewReport(jasperPrint);
} catch (Exception ex) {
    String connectMsg = "Could not create the report " + ex.getMessage() + " " + ex.getLocalizedMessage();
    System.out.println(connectMsg);
}

このようなものを使用すると、新しいクエリを保持するクラスのメンバー変数を作成し、ユーザーが必要とする制約を使用してそれを構築できます。次に、表示時にデザインを変更します。

-ジェフ

于 2009-03-27T14:58:01.870 に答える
1

JasperDesign は、Jrxml ファイルで動的クエリを作成する際の問題を解決するのに役立ちました。

動的 SQL を構築するために、Squiggle (Google Code) を使用して SQL を動的に構築していました。ありがとうジェフ

于 2010-05-27T13:01:32.527 に答える
0

私は、これらの種類のものに適したストアド プロシージャを使用してそれを行いました。それ以外の場合は、Java に切り替えることができます。データベースからデータを取得し、ユーザーが指定したパラメーターに従ってフィルター処理し、グループ化し、レンダリングを行う Jasper レポートに Bean のコレクションとして送信します。

于 2009-03-17T10:26:09.997 に答える