レポートデータソース
データソースは構造化されたデータコンテナです。レポートの生成中に、JasperReportsエンジンはデータソースからデータを取得します。データは、データベース、XMLファイル、オブジェクトの配列、およびオブジェクトのコレクションから取得できます。「レポートの入力」の章で説明したように、fillReportXXX()メソッドは、入力する必要のあるレポートのデータソースを次の形式で受信することを想定しています。net.sf.jasperreports.engine.JRDataSource オブジェクトまたは java.sql.Connection (レポートデータがリレーショナルデータベースで見つかった場合)。
JRDataSourceインターフェースには、実装する必要のある2つのメソッドしかありません。
public boolean next()はJRExceptionをスローします。
レポートの入力時に、このメソッドは、データを反復処理するときに、レポートエンジンによってデータソースオブジェクトで呼び出されます。
public Object getFieldValue(JRField jrField)はJRExceptionをスローします。
このメソッドは、現在のデータソースレコードの各レポートフィールドの値を提供します。
データソースからデータを取得する唯一の方法は、レポートフィールドを使用することです。JRDataSourceインターフェースには、データソースのレコードを取得する方法に応じて、いくつかのデフォルトの実装があります。
データソースの実装
以下の表は、データソースとその実装クラスをまとめたものです。
情報元 | 実装クラス |
---|---|
JDBC | net.sf.jasperreports.engine.JRResultSetDataSource |
JavaBean | net.sf.jasperreports.engine.data.JRBeanCollectionDataSource、net.sf.jasperreports.engine.data.JRBeanArrayDataSource |
マップベース | 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 |
空の | net.sf.jasperreports.engine.JREmptyDataSource |
JDBCデータソース
クラス JRResultSetDataSourcejava.sql.ResultSetオブジェクトをクラップスします。これは、レポートデータがリレーショナルデータベースから抽出されるときに最も一般的に使用されるデータソースの実装です。場合のjava.sql.Connectionを代わりエンジンに渡され、それは最初の関連クエリを実行し、返された記憶のjava.sql.ResultSetのJRResultSetDataSourceインスタンスにおけるオブジェクト。
JavaBeanデータソース
クラス JRBeanArrayDataSource そして JRBeanCollectionDataSourceJavaBeanオブジェクトの配列とコレクションをラップできる実装を表します。配列またはコレクション内の各オブジェクトは、このタイプのデータソースの1つのレコードとして表示されます。特定のJavaBeanプロパティと対応するレポートフィールド間のマッピングは、命名規則によって行われます。レポートフィールドの名前は、JavaBeans仕様で指定されているJavaBeanプロパティの名前と同じである必要があります。
このチュートリアルのすべての例では、JRBeanCollectionDataSourceを使用しました。
マップベースのデータソース
実装クラス JRMapArrayDataSource そして JRMapCollectionDataSource親アプリケーションが、メモリ内で利用可能なレポートデータをjava.util.Mapオブジェクトとしてすでに保存している場合に役立ちます。ラップされた配列またはコレクション内の各Mapオブジェクトは、データソース内の仮想レコードと見なされ、各レポートフィールドの値は、キーとして指定されたレポートフィールドを使用してマップから抽出されます。
TableModelデータソース
多くのクライアント側アプリケーションでは、データは表形式で表示されます。多くのアプリケーションに共通する要件は、ユーザーがこの表形式をレポートとして印刷できるようにすることです。実装クラスJRTableModelDataSourceSwingアプリケーションでは、表形式からレポートを生成するタスクが簡単になります。このクラスは、javax.swing.table.TableModelオブジェクトをラップします。ラップされたTableModelオブジェクトの列には、名前または0から始まるインデックスのいずれかでアクセスできます。
XMLデータソース
クラス JRXmlDataSourceはDOMに基づくデータソースの実装であり、XPath式を使用してXMLドキュメントからデータを選択します。XMLデータソースのレコードは、XPath式で選択されたノード要素で表されます。フィールド値は、フィールド記述(JRXMLの<fieldDescription>要素)によって提供されるXPath式を使用して各レコードから取得されます。
XPathは、XMLドキュメントの属性と要素をナビゲートするために使用される言語です。XPathの詳細については、次のURLを参照してください。http://www.w3.org/TR/xpath.
CSVデータソース
JRCsvDataSource構造化テキストファイルからデータを取得するデータソースの実装を表します。通常はCSVです。フィールド値は、列インデックスを使用して取得されます。
XLSデータソース
JRXlsDataSourceExcelドキュメントからデータを取得するデータソースの実装を表します。このデータソース実装のレポートフィールドマッピングも、フィールド列インデックスに基づいています。
空のデータソース
クラス JREmptyDataSourceは、指定された数の仮想空レコードを内部に持つデータソースをシミュレートします。これは、基本的なレポートプレビュー機能を提供するため、または特別なレポートテンプレートで、またはテストとデバッグの目的でUIツールによって使用されます。
巻き戻し可能なデータソース
ザ・ net.sf.jasperreports.engine.JRRewindableDataSource基本的なJRDataSourceインターフェースを拡張します。これは、moveFirst()と呼ばれる1つのメソッドのみをインターフェースに追加します。このメソッドは、カーソルをデータソースの最初の要素に移動することを目的としています。
巻き戻し可能なデータソースは、isSplitAllowed = "false"設定のために分割が許可されていないバンド内に配置されたサブレポートを操作し、現在のページにサブレポートをレンダリングするための十分なスペースがない場合に役立ちます。
上記のすべてのデータソースの実装は、 JRResultSetDataSource、レコードポインタを戻すことはサポートされていないため。これは、このデータソースを手動で使用してjava.sql.ResultSetをラップしてから、サブレポートに渡す場合にのみ問題を引き起こします。SQLクエリがサブレポートテンプレートにある場合は、次のページでサブレポートを再起動するとエンジンが再度実行するため、問題はありません。
データソースプロバイダー
JasperReportsライブラリにはインターフェイスがあります net.sf.jasperreports.engine.JRDataSourceProvider。これは、データソースオブジェクトの作成と破棄に役立ちます。 GUIツールを使用してレポートテンプレートを作成する場合、レポートのデータソースをカスタマイズするための特別なツールが必要です。 JRDataSourceProviderは、カスタムデータソースをデザインツールにプラグインする標準的な方法です。このインターフェイスのカスタム実装では、データソースオブジェクトの作成と破棄を可能にする次のメソッドと、可能であればデータソース内の使用可能なレポートフィールドを一覧表示するメソッドを実装する必要があります。
public boolean supportsGetFieldsOperation();
public JRField[] getFields(JasperReport report)
throws JRException, UnsupportedOperationException;
public JRDataSource create(JasperReport report) throws JRException;
public void dispose(JRDataSource dataSource) throws JRException;