モジュール java.sql.rowset
パッケージ javax.sql.rowset

インタフェースJoinRowSet

すべてのスーパー・インタフェース:
AutoCloseable, CachedRowSet, Joinable, ResultSet, RowSet, WebRowSet, Wrapper

public interface JoinRowSet extends WebRowSet
JoinRowSetインタフェースは、異なったRowSetオブジェクトの関連データを、SQL JOINを表す1つのJoinRowSetオブジェクトにまとめるメカニズムを提供します。 つまり、JoinRowSetオブジェクトは、SQL JOIN関係を形成するRowSetオブジェクトからのデータのコンテナとして動作します。

Joinableインタフェースは、SQL JOIN関係確立の基盤となる一致列の設定、取得、および設定解除のメソッドを提供します。 または、一致列はJointRowSetaddRowSetメソッドの適切なバージョンを指定することによっても設定できます。

1.0 概要

未接続のRowSetオブジェクト(CachedRowSetオブジェクトと、CachedRowSetインタフェースを拡張する実装)は、データ・ソースに再接続する手間なしで、RowSetオブジェクト間にSQL JOINを確立する標準の方法を持ちません。 JoinRowSetインタフェースは、このニーズに対応するために設計されています。

JoinRowSetオブジェクトにRowSetオブジェクトを追加して、SQL JOIN関係を構成できます。 つまり、RowSetオブジェクトは、接続されている場合でも未接続の場合でも、JOINを構成することができます。 接続環境で動作するRowSetオブジェクト(JdbcRowSetオブジェクト)は、すでに接続しているデータベースを使って、表間に直接SQL JOIN関係を確立することをお勧めします。 しかし、必要に応じて、JoinRowSetオブジェクトにJdbcRowSetオブジェクトを追加することもできます。

単一のSQL JOINに関連付けられるJoinRowSetのインスタンスであれば、任意の数のRowSetオブジェクトをそのインスタンスに追加できます。 定義によると、SQL JOIN文は、複数のリレーショナル・データベース・テーブルに格納されたデータを、共通の属性に基づいてまとめるために使用されます。 Joinableインタフェースは、一致列の設定により共通属性を作成するメソッドを提供します。 一致列は、一般的に主キーと一致しますが、必ずしも一致列が主キーと同一である必要はありません。 列の一致を確立し、適用することで、JoinRowSetオブジェクトは、使用可能なリレーショナル・データベースを使用せずに、RowSetオブジェクト間にJOIN関係を確立します。

確立されるJOINの型は、setJoinTypeメソッドを使ってJoinRowSet定数を1つ設定することで決定されます。 次のSQL JOIN型を設定できます。

  • CROSS_JOIN
  • FULL_JOIN
  • INNER_JOIN - JOIN型が設定されていない場合のデフォルト
  • LEFT_OUTER_JOIN
  • RIGHT_OUTER_JOIN
型を設定していない場合、JOINは自動的に内部結合になります。 JoinRowSetインタフェースのフィールドのコメントに、標準SQL JOIN型であるこれらのJOIN型が説明されています。

2.0 JoinRowSetオブジェクトによるJOINの作成

JoinRowSetオブジェクトの作成時には、このオブジェクトは空の状態です。 最初に追加されたRowSetオブジェクトがJOIN関係の基盤になります。 アプリケーションでは、JoinRowSetオブジェクトに追加する各RowSetオブジェクトのどの列を一致列にするかを決定する必要があります。 すべてのRowSetオブジェクトに一致列が格納され、各一致列の値は、ほかの一致列の値と比較可能な値である必要があります。 列には同じ名前を付けることが多いですが、その必要はなく、比較可能なデータ型であれば、まったく同じデータ型を格納する必要もありません。

一致列は2つの方法で設定できます:

  • JoinablesetMatchColumnメソッドの呼出しによる設定。
    これはRowSetオブジェクトをJoinRowSetオブジェクトに追加する前に一致列を設定できる唯一の方法です。
    setMatchColumnメソッドを使用するには、RowSetオブジェクトがJoinableインタフェースを実装している必要があります。 一致列値を設定したら、このメソッドを使用して、いつでも一致列をリセットできます。
  • 列名または列番号(または列名または列番号の配列)をとるJoinRowSetaddRowSetメソッドのいずれかのバージョンの呼出しによる設定。
    5つのaddRowSetメソッドのうち4つは、一致列をパラメータに取ります。
    これらの4つのメソッドは、RowSetオブジェクトがJoinRowSetオブジェクトへ追加されるときに、一致列を設定またはリセットします。

3.0 使用例

次のコードの抜粋では、JoinRowSetオブジェクトに2つのCachedRowSetオブジェクトを追加します。 この例では、SQL JOIN型ではなく、デフォルトのJOIN型であるINNER_JOINが確立されている点に注目してください。

次のコードの抜粋では、表EMPLOYEES (最初の列EMP_IDが一致列に設定されている)が、JoinRowSetオブジェクトjrsに追加されます。 続いて、表ESSP_BONUS_PLAN (一致列は同じくEMP_ID列)が追加されます。 この2番目の表がjrsに追加されるとき、追加されるのは、表EMPLOYEES内のEMP_ID値に一致したEMP_ID値を持つESSP_BONUS_PLAN内の列だけです。 この場合、ボーナス制度(bonus plan)の全員が従業員(employee)であるため、表ESSP_BONUS_PLANのすべての行がJoinRowSetオブジェクトに追加されます。 この例では、追加される両方のCachedRowSetオブジェクトがJoinableインタフェースを実装しているため、JoinablesetMatchColumnメソッドを呼び出すことができます。

     JoinRowSet jrs = new JoinRowSetImpl();

     ResultSet rs1 = stmt.executeQuery("SELECT * FROM EMPLOYEES");
     CachedRowSet empl = new CachedRowSetImpl();
     empl.populate(rs1);
     empl.setMatchColumn(1);
     jrs.addRowSet(empl);

     ResultSet rs2 = stmt.executeQuery("SELECT * FROM ESSP_BONUS_PLAN");
     CachedRowSet bonus = new CachedRowSetImpl();
     bonus.populate(rs2);
     bonus.setMatchColumn(1); // EMP_ID is the first column
     jrs.addRowSet(bonus);
 

この時点で、jrsは、2つのRowSetオブジェクトのEMP_ID列に基づく内部JOINになります。 アプリケーションは、あたかも単一のRowSetオブジェクトをブラウズするかのようにして、結合されたデータをブラウズできます。 jrs i自体がRowSetオブジェクトなので、アプリケーションは、RowSetメソッドを使って、jrsのナビゲートや変更を行うことができます。

     jrs.first();
     int employeeID = jrs.getInt(1);
     String employeeName = jrs.getString(2);
 

アプリケーションが2番目または後続のRowSetオブジェクトを追加する場合は、SQL JOINを適用する必要があるので、JOINの実行時に初期パフォーマンスが低下する可能性があります。

次のコードの抜粋は、その他のCachedRowSetオブジェクトを追加します。 この例では、JoinRowSetオブジェクトにCachedRowSetが追加されるとき、一致列(EMP_ID)が設定されます。

     ResultSet rs3 = stmt.executeQuery("SELECT * FROM 401K_CONTRIB");
     CachedRowSet fourO1k = new CachedRowSetImpl();
     four01k.populate(rs3);
     jrs.addRowSet(four01k, 1);
 

JoinRowSetオブジェクトjrsに、3つの表の値がすべて追加されました。 EMP_ID列の値がjrs内のEMP_ID列の値と一致しているfour01k内の各行のデータが、jrsに追加されています。

4.0 JoinRowSetのメソッド

JoinRowSetインタフェースは、RowSetオブジェクトの追加やJoinRowSetオブジェクトの情報の取得を行う複数のメソッドを提供します。
  • 1つ以上のRowSetオブジェクトを追加するメソッド
    これらのメソッドを使用すると、アプリケーションに、一度に1つのRowSetオブジェクトを追加することも、または同時に複数のRowSetオブジェクトを追加することもできます。
    どちらの場合でも、メソッドは、追加される各RowSetオブジェクトの一致列を指定できます。
  • 情報を取得するメソッド
    JoinRowSetオブジェクト内のRowSetオブジェクトを取得するメソッドや、RowSet名を取得するメソッドがあります。
    また、JOINを構成するために背後で使用されるSQL WHERE節またはWHERE節の実行内容を説明するテキストを取得するメソッドもあります。
  • JOINの型に関連するメソッド
    JOIN型を設定するメソッドが1つ、JoinRowSetオブジェクトが指定された型をサポートするかどうかを確認するメソッドが5つあります。
  • JoinRowSetオブジェクトのコピーを作成するメソッド
    このメソッドは、データ・ソースに対する持続的なコピーを作成します。
導入されたバージョン:
1.5