Jasper-reports-jasper-report-data-sources

提供:Dev Guides
移動先:案内検索

レポートデータソース

データソースは構造化されたデータコンテナです。 レポートの生成中に、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データソース

*JRCsvDataSource* は、構造化テキストファイルからデータを取得するデータソースの実装を表します。通常、CSV。 フィールド値は、列インデックスを使用して取得されます。

XLSデータソース

*JRXlsDataSource* は、Excelドキュメントからデータを取得するデータソースの実装を表します。 このデータソース実装のレポートフィールドマッピングは、フィールド列インデックスにも基づいています。

空のデータソース

*JREmptyDataSource* クラスは、指定された数の仮想空レコードが内部にあるデータソースをシミュレートします。 UIツールで使用され、基本的なレポートプレビュー機能を提供したり、特別なレポートテンプレートで使用したり、テストやデバッグの目的で使用したりします。

巻き取り可能なデータソース

*net.sf.jasperreports.engine.JRRewindableDataSource* は、基本的な_JRDataSource_インターフェースを拡張します。 moveFirst()と呼ばれるメソッドを1つだけインターフェースに追加します。 このメソッドは、データソースの最初の要素にカーソルを移動することを目的としています。

巻き戻し可能なデータソースは、isSplitAllowed = "false"設定が原因で分割が許可されていないサブレポートをバンド内に配置し、現在のページにサブレポートを表示するための十分なスペースがない場合に役立ちます。

上記のすべてのデータソース実装は、 JRResultSetDataSource を除いて巻き戻し可能です。これは、レコードポインターを戻すことをサポートしていないためです。 これは、サブレポートに渡す前にjava.sql.ResultSetをラップするためにこのデータソースを手動で使用する場合にのみ問題を引き起こします。 SQLクエリがサブレポートテンプレートにある場合、問題はありません。エンジンが次のページでサブレポートを再起動するときに、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;