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

インタフェースFilteredRowSet

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

    public interface FilteredRowSet
    extends WebRowSet
    FilteredRowSetのすべての標準実装が実装しなければならない標準インタフェースです。 FilteredRowSetImplクラスは、必要に応じて拡張可能なリファレンス実装を提供します。 ベンダーは、このインタフェースを実装することによって、独自のバージョンを実装できます。

    1.0 背景

    RowSetオブジェクトで、ある程度のコンテンツ・フィルタリング機能を提供しなければならない場合があります。 この場合、1つの可能性のある解決方法として、すべての標準RowSet実装のクエリー言語を提供する方法があります。しかし、これは未接続のRowSetオブジェクトなどの軽量コンポーネントには現実的な方法ではありません。 FilteredRowSetインタフェースは、膨大なクエリー言語とそれに伴う処理を提供することなく、このニーズに対応できる必要があります。

    JDBC FilteredRowSet標準実装は、RowSetインタフェースを実装し、CachedRowSet™クラスを拡張します。 CachedRowSetクラスは、protectedカーソル操作メソッドのセットを提供します。FilteredRowSet実装は、これらのメソッドをオーバーライドしてフィルタ・リング機能を提供できます。

    2.0 プレディケートの共有

    親インタフェースで、継承されたcreateSharedメソッドを使ってFilteredRowSet実装を共有している場合、すべてのFilteredRowSetインスタンスのクローンで、変更を加えることなくPredicateを共有する必要があります。

    3.0 使用方法

    Predicateを実装した場合(PredicateクラスのJavaDocの例を参照)、FilteredRowSetを次のように使用することができます。

     
         FilteredRowSet frs = new FilteredRowSetImpl();
         frs.populate(rs);
    
         Range name = new Range("Alpha", "Bravo", "columnName");
         frs.setFilter(name);
    
         frs.next() // only names from "Alpha" to "Bravo" will be returned
     
     
    上記の例では、Predicateインタフェースを実装するRangeオブジェクトを初期化しています。 このオブジェクトには、このFilteredRowSetオブジェクトから出力または変更されたすべての行が、columnName列内のAlphaからBravoの範囲に収まる必要があります。 フィルタの範囲内に収まるデータを格納しないFilteredRowSetオブジェクトにフィルタが適用された場合は、行が返されません。

    このフレームワークでは、クエリー言語処理を利用することなく、predicateを実装する複数のクラスを、必要なフィルタ・リング結果と組み合わせて使用することができます。

    4.0 FilteredRowSetオブジェクトの更新

    FilteredRowSetオブジェクトのpredicateセットは、RowSetオブジェクト内のすべての行に基準を適用し、RowSetオブジェクト内の行のサブセットを管理します。 この基準では、可視の行のサブセットを制御できるだけでなく、行の変更、削除、または挿入の基準を定義することもできます。

    したがって、FilteredRowSetオブジェクト上のpredicateセットは双方向と見なされ、セット基準はFilteredRowSetオブジェクトのすべてのビューおよび更新のゲート・メカニズムと見なされます。 基準に違反するFilteredRowSetを更新しようとすると、SQLExceptionオブジェクトがスローされます。

    FilteredRowSet範囲基準は、FilteredRowSetインスタンスに、新しいPredicateオブジェクトを適用することで、いつでも変更できます。 この処理は、FilteredRowSetオブジェクトへの追加参照が検出されない場合も実行可能です。 新しいフィルタは、FilteredRowSetオブジェクト内の基準施行に即座に影響し、その後のすべてのビューと更新は同様の強制が適用されます。

    5.0 フィルタ外部の行の動作

    FilteredRowSetオブジェクトに設定されたフィルタの範囲外の行は、フィルタを削除するか、新しいフィルタを適用するまで変更できません。

    さらに、フィルタの境界内に収まる行のみが、データ・ソースと同期されます。

    導入されたバージョン:
    1.5
    • メソッドの詳細

      • setFilter

        void setFilter​(Predicate p)
                throws SQLException
        指定されたPredicateオブジェクトをこのFilteredRowSetオブジェクトに適用します。 フィルタは、インバウンド・ビューとアウトバウンド・ビューの両方を制御し、可視の行や操作可能な行を制限します。

        新しいPredicateオブジェクトはいつでも設定可能です。 設定すると、RowSetオブジェクトのデータに課された制約が変更されます。 また、複数のコンポーネントが単一のFilteredRowSetで処理されるため、実行時にフィルタを変更すると、問題が発生します。 アプリケーション開発者は、配下のPredicateオブジェクトが変更されたとき、FilteredRowSetオブジェクトの複数のハンドルを管理する責任を負う必要があります。

        パラメータ:
        p - このFilteredRowSetオブジェクトのフィルタを定義するPredicateオブジェクト。 null値を設定すると、プレディケートをクリアして、すべての行を可視にすることができる。
        例外:
        SQLException - Predicateオブジェクトの設定時にエラーが発生した場合
      • getFilter

        Predicate getFilter()
        このFilteredRowSetオブジェクトのアクティブなフィルタを取得します。
        戻り値:
        p。このFilteredRowSetオブジェクトのPredicate。フィルタが設定されていない場合はnull