モジュール 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
  • フィールド詳細

    • CROSS_JOIN

      static final int CROSS_JOIN
      2つの表のクロス製品を提供するANSI型JOINです。
      関連項目:
      定数フィールド値
    • INNER_JOIN

      static final int INNER_JOIN
      2つの表を内部結合させるANSI型JOINです。 結合した表のいずれかに一致しない行がある場合、この行は削除されます。
      関連項目:
      定数フィールド値
    • LEFT_OUTER_JOIN

      static final int LEFT_OUTER_JOIN
      2つの表を左外部結合させるANSI型JOINです。 SQLでは、JOIN文の左側からすべてのレコードが返される位置として記述されます。
      関連項目:
      定数フィールド値
    • RIGHT_OUTER_JOIN

      static final int RIGHT_OUTER_JOIN
      2つの表を右外部結合させるANSI型JOINです。 SQLでは、左側の表に一致するレコードがない場合でも、JOIN文の右側の表からすべてのレコードが返される位置として記述されます。
      関連項目:
      定数フィールド値
    • FULL_JOIN

      static final int FULL_JOIN
      完全なJOINを提供するANSIスタイルのJOIN 一方の表から、もう一方の表の一致レコードとは無関係に返されるすべての行を指定します。
      関連項目:
      定数フィールド値
  • メソッドの詳細

    • addRowSet

      void addRowSet​(Joinable rowset) throws SQLException
      指定されたRowSetオブジェクトをこのJoinRowSetオブジェクトに追加します。 RowSetオブジェクトがこのJoinRowSetオブジェクトに追加される最初のオブジェクトである場合、JOIN関係が確立される基盤となります。

      このメソッドは、指定されたRowSetオブジェクトがJoinablesetMatchColumnメソッドで設定された一致列をすでに持っている場合にのみ使用する必要があります。

      ノート: Joinableオブジェクトは、Joinableインタフェースを実装している任意のRowSetオブジェクトです。

      パラメータ:
      rowset - このJoinRowSetオブジェクトに追加されるRowSetオブジェクト。Joinableインタフェースを実装し、一致列セットを持っている必要がある
      例外:
      SQLException - (1)このJoinRowSetオブジェクトに空の行セットが追加された場合、(2) rowsetに一致列が設定されていない場合、(3) rowsetがアクティブなJOINに違反する場合
      関連項目:
      Joinable.setMatchColumn(int)
    • addRowSet

      void addRowSet​(RowSet rowset, int columnIdx) throws SQLException
      指定されたRowSetオブジェクトをこのJoinRowSetオブジェクトに追加し、指定された列をRowSetオブジェクトの一致列として設定します。 RowSetオブジェクトがこのJoinRowSetオブジェクトに追加される最初のオブジェクトである場合、JOIN関係が確立される基盤となります。

      このメソッドは、RowSetがまだ一致列セットを持たない場合に使用されます。

      パラメータ:
      rowset - このJoinRowSetオブジェクトに追加されるRowSetオブジェクト。Joinableインタフェースを実装できる
      columnIdx - 一致列になる列を示すint
      例外:
      SQLException - (1) rowsetが空の行セットの場合、(2) rowsetがアクティブなJOINに違反する場合
      関連項目:
      Joinable.unsetMatchColumn(int)
    • addRowSet

      void addRowSet​(RowSet rowset, String columnName) throws SQLException
      rowsetをこのJoinRowSetオブジェクトに追加し、指定された列を一致列に設定します。 rowsetが最初にこのJoinRowSetオブジェクトに追加される場合、これがJOIN関係が確立される基盤となります。

      このメソッドは、指定されたRowSetオブジェクトがまだ一致列を持たない場合に使用されます。

      パラメータ:
      rowset - このJoinRowSetオブジェクトに追加されるRowSetオブジェクト。Joinableインタフェースを実装できる
      columnName - 一致列として設定される列の名前を指定するStringオブジェクト
      例外:
      SQLException - (1) rowsetが空の行セットの場合、(2) rowsetの一致列がJOIN条件を満たしていない場合
    • addRowSet

      void addRowSet​(RowSet[] rowset, int[] columnIdx) throws SQLException
      指定されたRowSetオブジェクトの配列に含まれる1つ以上のRowSetオブジェクトをこのJoinRowSetオブジェクトに追加し、各RowSetオブジェクトの一致列を指定された列インデックスの配列内の一致列に設定します。 columnIdxの最初の要素は、rowsetの最初のRowSetオブジェクトの一致列、columnIdxの2番目の要素はrowsetの2番目の要素の一致列(以下同様)に設定されます。

      このJoinRowSetオブジェクトに追加される最初のRowSetオブジェクトが、JOIN関係の基盤になります。

      このメソッドは、指定されたRowSetオブジェクトがまだ一致列を持たない場合に使用されます。

      パラメータ:
      rowset - JOINに追加される1つ以上のRowSetオブジェクトの配列。Joinableインタフェースを実装できる
      columnIdx - rowsetRowSetオブジェクトの一致列として設定する列のインデックスを示すint値の配列
      例外:
      SQLException - (1)このJoinRowSetオブジェクトに空の行セットが追加された場合、(2) rowset内のRowSetオブジェクトに一致列が設定されていない場合、(3)追加されるRowSetオブジェクトがアクティブなJOINに違反する場合
    • addRowSet

      void addRowSet​(RowSet[] rowset, String[] columnName) throws SQLException
      指定されたRowSetオブジェクトの配列に含まれる1つ以上のRowSetオブジェクトをこのJoinRowSetオブジェクトに追加し、各RowSetオブジェクトの一致列を指定された列名の配列内の一致列に設定します。 columnNameの最初の要素は、rowsetの最初のRowSetオブジェクトの一致列、columnNameの2番目の要素はrowsetの2番目の要素の一致列(以下同様)に設定されます。

      このJoinRowSetオブジェクトに追加される最初のRowSetオブジェクトが、JOIN関係の基盤になります。

      このメソッドは、指定されたRowSetオブジェクト(複数可)がまだ一致列を持たない場合に使用されます。

      パラメータ:
      rowset - JOINに追加される1つ以上のRowSetオブジェクトの配列。Joinableインタフェースを実装できる
      columnName - rowsetRowSetオブジェクトの一致列として設定する列の名前を示すString値の配列
      例外:
      SQLException - (1)このJoinRowSetオブジェクトに空の行セットが追加された場合、(2) rowset内のRowSetオブジェクトに一致列が設定されていない場合、(3)追加されるRowSetオブジェクトがアクティブなJOINに違反する場合
    • getRowSets

      Collection<?> getRowSets() throws SQLException
      このJoinRowSetオブジェクトに追加されたRowSetオブジェクトを含むCollectionオブジェクトを返します。 JOIN内のRowSet数nを返し、この共用体内で発生したすべての更新を保持します。
      戻り値:
      このJoinRowSetオブジェクトに追加されたRowSetオブジェクトで構成されるCollectionオブジェクト
      例外:
      SQLException - 返されるCollectionオブジェクトの生成時にエラーが発生した場合
    • getRowSetNames

      String[] getRowSetNames() throws SQLException
      このJoinRowSetオブジェクトに追加されたRowSetオブジェクトの名前を含むString配列を返します。
      戻り値:
      このJoinRowSetオブジェクト内のRowSetオブジェクトの名前を含むString配列
      例外:
      SQLException - RowSetオブジェクトの名前の取得時にエラーが発生した場合
      関連項目:
      CachedRowSet.setTableName(java.lang.String)
    • toCachedRowSet

      CachedRowSet toCachedRowSet() throws SQLException
      このJoinRowSetオブジェクト内のデータを含む新しいCachedRowSetオブジェクトを作成します。これは、CachedRowSetオブジェクトのSyncProviderオブジェクトを使って、データ・ソースに保存することができます。

      JoinRowSetに更新または変更を適用した場合、メソッドによって返されるCachedRowSetは、その変更をデータ・ソース内の元の行と表内に持続させることができません。 返されるCachedRowSetインスタンスには、変更データは含まれません。また、元のSQL文のすべてのプロパティがクリアされます。 アプリケーションは、RowSet.setCommandメソッドを使用して、このSQL文をリセットするべきです。

      変更を元の表のデータ・ソースに持続させるためには、acceptChangesメソッドをJoinRowSetオブジェクト・インスタンス上に呼び出します。 実装では、実装内の内部データと更新追跡機能を利用して、SyncProviderと対話し、変更を持続させられます。

      戻り値:
      JoinRowSetのコンテンツを含むCachedRowSet
      例外:
      SQLException - CachedRowSetオブジェクトのアセンブル時にエラーが発生した場合
      関連項目:
      RowSetCachedRowSetSyncProvider
    • supportsCrossJoin

      boolean supportsCrossJoin()
      JoinRowSet実装がCROSS_JOINをサポートするかどうかを示します。
      戻り値:
      CROSS_JOINがサポートされている場合はtrue、そうでない場合はfalse
    • supportsInnerJoin

      boolean supportsInnerJoin()
      JoinRowSet実装がINNER_JOINをサポートするかどうかを示します。
      戻り値:
      INNER_JOINがサポートされている場合はtrue、そうでない場合はfalse
    • supportsLeftOuterJoin

      boolean supportsLeftOuterJoin()
      JoinRowSet実装がLEFT_OUTER_JOINをサポートするかどうかを示します。
      戻り値:
      LEFT_OUTER_JOINがサポートされている場合はtrue、そうでない場合はfalse
    • supportsRightOuterJoin

      boolean supportsRightOuterJoin()
      JoinRowSet実装がRIGHT_OUTER_JOINをサポートするかどうかを示します。
      戻り値:
      RIGHT_OUTER_JOINがサポートされている場合はtrue、そうでない場合はfalse
    • supportsFullJoin

      boolean supportsFullJoin()
      JoinRowSet実装がFULL_JOINをサポートするかどうかを示します。
      戻り値:
      FULL_JOINがサポートされている場合はtrue、そうでない場合はfalse
    • setJoinType

      void setJoinType​(int joinType) throws SQLException
      アプリケーションに、JoinRowSetオブジェクト・インスタンス内の表に適用されるJOINの型の調整を許可します。 実装は、指定されたJOIN型をサポートしない場合、SQLExceptionをスローします。
      パラメータ:
      joinType - JoinRowSetインスタンスをただちに再構成する、SQL JOINの標準JoinRowSet.XXX staticフィールド定義。
      例外:
      SQLException - サポートされていないJOIN型が設定された場合
      関連項目:
      getJoinType()
    • getWhereClause

      String getWhereClause() throws SQLException
      JoinRowSetオブジェクトで使用される、SQLによく似たWHERE節の記述を返します。 実装は、JOINのSQL文字列記述を提供することにより、SQL JOINのWHERE節を記述できます。または、JoinRowSetを使用して、アプリケーションを補助するテキスト記述を提供できます。
      戻り値:
      whereClause。JoinRowSetインスタンスで使用される論理WHERE節のテキスト記述またはSQL記述
      例外:
      SQLException - WHERE節の表現の生成時にエラーが発生した場合。
    • getJoinType

      int getJoinType() throws SQLException
      このJoinRowSetインスタンスを管理するSQL JOIN型を記述するintを返します。 返される型は標準JoinRowSet型(CROSS_JOININNER_JOINLEFT_OUTER_JOINRIGHT_OUTER_JOIN、またはFULL_JOIN)のいずれかになります。
      戻り値:
      SQL JOINの標準JoinRowSet staticフィールド定義のいずれかのjoinType。 明示的に型が設定されていない場合は、デフォルトのJOIN型としてJoinRowSet.INNER_JOINが返される。
      例外:
      SQLException - JoinRowSetインスタンスによってサポートされるSQL JOIN型の判断時にエラーが発生した場合。
      関連項目:
      setJoinType(int)