Jasper-reports-jasper-report-data-sources
レポートデータソース
データソースは構造化されたデータコンテナです。 レポートの生成中に、JasperReportsエンジンはデータソースからデータを取得します。 データベース、XMLファイル、オブジェクトの配列、およびオブジェクトのコレクションからデータを取得できます。 チャプターリンク:/jasper_reports/jasper_filling_reports [Filling Reports]で確認したように、fillReportXXX()メソッドは、 net.sf.jasperreports.engine.JRDataSourceの形式で、レポートのデータソースを受け取る必要があります。 オブジェクトまたは java.sql.Connection (レポートデータがリレーショナルデータベースで見つかった場合)。
JRDataSourceインターフェイスには、実装する必要がある2つのメソッドしかありません-
- public boolean next()はJRExceptionをスローします。
- レポート入力時に、このメソッドは、データを反復処理するときにレポートエンジンによってデータソースオブジェクトで呼び出されます。
- public Object getFieldValue(JRField jrField)はJRExceptionをスローします。
- このメソッドは、現在のデータソースレコードの各レポートフィールドの値を提供します。
データソースからデータを取得する唯一の方法は、レポートフィールドを使用することです。 JRDataSourceインターフェイスには、データソースのレコードを取得する方法に応じて、いくつかのデフォルトの実装があります。
データソースの実装
以下の表は、データソースとその実装クラスをまとめたものです-
Datasource | Implementation Class |
---|---|
JDBC | net.sf.jasperreports.engine.JRResultSetDataSource |
JavaBean | net.sf.jasperreports.engine.data.JRBeanCollectionDataSource, net.sf.jasperreports.engine.data.JRBeanArrayDataSource |
Map-based | net.sf.jasperreports.engine.data.JRMapArrayDataSource, net.sf.jasperreports.engine.data.JRMapCollectionDataSource |
TableModel | net.sf.jasperreports.engine.data.JRTableModelDataSource |
XML | net.sf.jasperreports.engine.data.JRXmlDataSource |
CSV | net.sf.jasperreports.engine.data.JRCsvDataSource |
XLS | net.sf.jasperreports.engine.data.JRXlsDataSource |
Empty | net.sf.jasperreports.engine.JREmptyDataSource |
JDBCデータソース
クラス JRResultSetDataSource は_java.sql.ResultSet_オブジェクトを作成します。 これは、リレーショナルデータベースからレポートデータが抽出されるときに最も一般的に使用されるデータソース実装です。 代わりに_java.sql.Connection_がエンジンに渡される場合、最初に関連するクエリが実行され、返された_java.sql.ResultSet_オブジェクトがJRResultSetDataSourceインスタンスに格納されます。
JavaBeanデータソース
クラス JRBeanArrayDataSource および JRBeanCollectionDataSource は、JavaBeanオブジェクトの配列とコレクションをラップできる実装を表します。 配列またはコレクション内の各オブジェクトは、このタイプのデータソースの1つのレコードと見なされます。 特定のJavaBeanプロパティと対応するレポートフィールド間のマッピングは、命名規則によって行われます。 レポートフィールドの名前は、JavaBeans仕様で指定されているJavaBeanプロパティの名前と同じである必要があります。
このチュートリアルのすべての例では、JRBeanCollectionDataSourceを使用しました。
マップベースのデータソース
実装クラス JRMapArrayDataSource および JRMapCollectionDataSource は、親アプリケーションが既に_java.util.Map objects_として使用可能なレポートデータをメモリ内に保存している場合に役立ちます。 ラップされた配列またはコレクション内の各Mapオブジェクトは、データソース内の仮想レコードと見なされ、各レポートフィールドの値は、キーとして指定されたレポートフィールドを使用してマップから抽出されます。
TableModelデータソース
多くのクライアント側アプリケーションでは、データは表形式で表示されます。 多くのアプリケーションの一般的な要件は、ユーザーがこの表形式をレポートとして印刷できるようにすることです。 実装クラス JRTableModelDataSource は、表形式からレポートを生成するタスクをSwingアプリケーションにとって簡単にします。 このクラスはjavax.swing.table.TableModelオブジェクトをラップします。 ラップされたTableModelオブジェクトの列には、名前または0ベースのインデックスのいずれかでアクセスできます。
XMLデータソース
クラス JRXmlDataSource は、XOM式を使用してXMLドキュメントからデータを選択するDOMに基づくデータソース実装です。 XMLデータソースのレコードは、XPath式で選択されたノード要素によって表されます。 フィールドの値は、フィールドの説明(JRXMLの<fieldDescription>要素)で提供されるXPath式を使用して各レコードから取得されます。
XPathは、XMLドキュメントの属性と要素をナビゲートするために使用される言語です。 XPathの詳細については、http://www.w3.org/TR/xpathをご覧ください。
CSVデータソース
XLSデータソース
空のデータソース
巻き取り可能なデータソース
巻き戻し可能なデータソースは、isSplitAllowed = "false"設定が原因で分割が許可されていないサブレポートをバンド内に配置し、現在のページにサブレポートを表示するための十分なスペースがない場合に役立ちます。
上記のすべてのデータソース実装は、 JRResultSetDataSource を除いて巻き戻し可能です。これは、レコードポインターを戻すことをサポートしていないためです。 これは、サブレポートに渡す前にjava.sql.ResultSetをラップするためにこのデータソースを手動で使用する場合にのみ問題を引き起こします。 SQLクエリがサブレポートテンプレートにある場合、問題はありません。エンジンが次のページでサブレポートを再起動するときに、SQLクエリが再度実行されるためです。
データソースプロバイダー
JasperReportsライブラリには、 net.sf.jasperreports.engine.JRDataSourceProvider というインターフェースがあります。 これは、データソースオブジェクトの作成と破棄に役立ちます。 GUIツールを使用してレポートテンプレートを作成する場合、レポートのデータソースをカスタマイズするための特別なツールが必要です。 JRDataSourceProviderは、カスタムデータソースを設計ツールにプラグインする標準的な方法です。 このインターフェイスのカスタム実装では、データソースオブジェクトの作成と破棄を可能にする次のメソッドと、可能な場合はデータソース内の利用可能なレポートフィールドをリストするメソッドを実装する必要があります-