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

インタフェースPredicate


public interface Predicate
すべてのFilteredRowSetオブジェクトにフィルタを記述するフレームワークを提供する標準インタフェースです。

1.0 背景

Predicateインタフェースは、アプリケーションがFilteredRowSetオブジェクトに適用するフィルタを定義するために実装できる標準インタフェースです。 FilteredRowSetオブジェクトは、このインタフェースの実装を使用し、evaluateメソッドの実装に定義された制約を適用します。 FilteredRowSetオブジェクトはフィルタの制約を双方向に適用します。つまり、フィルタの制約内の行のみを出力するほか、逆方向についてもフィルタの制約内の行のみを挿入、変更または更新します。

2.0 実装のガイドライン

FilteredRowSetのpredicateを提供するためには、このインタフェースを実装する必要があります。 現時点では、JDBC RowSet実装(JSR-114)は標準フィルタの定義を指定していません。 FilteredRowSetインタフェースのリファレンス実装とベンダー実装の両方で、幅広いフィルタを定義し、展開するための標準的な手段とメカニズムを指定することにより、柔軟でアプリケーション主導のPredicate実装の発展につながります。

サンプル実装は、次のようになります。


    public class Range implements Predicate {

       private int[] lo;
       private int[] hi;
       private int[] idx;

       public Range(int[] lo, int[] hi, int[] idx) {
          this.lo = lo;
          this.hi = hi;
          this.idx = idx;
       }

      public boolean evaluate(RowSet rs) {

          // Check the present row determine if it lies
          // within the filtering criteria.

          for (int i = 0; i < idx.length; i++) {
             int value;
             try {
                 value = (Integer) rs.getObject(idx[i]);
             } catch (SQLException ex) {
                 Logger.getLogger(Range.class.getName()).log(Level.SEVERE, null, ex);
                 return false;
             }

             if (value < lo[i] && value > hi[i]) {
                 // outside of filter constraints
                 return false;
             }
         }
         // Within filter constraints
        return true;
      }
   }
 

上記の例は、単純な範囲プレディケートを実装します。 実装は、両方の列識別規則を使用したJDBC RowSet実装アプリケーションに提供されるStringおよび整数インデックス・ベースのコンストラクタを提供すべきですが、これは必須ではありません。

導入されたバージョン:
1.5
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    boolean
    evaluate(Object value, int column)
    このメソッドは、値がsetFilter()メソッドを使って設定されたフィルタ・リング基準(複数の制約が存在する場合は複数の基準)内に収まっているかどうかをチェックするために、FilteredRowSetオブジェクトによって呼び出されます。
    boolean
    evaluate(Object value, String columnName)
    このメソッドは、値がsetFilterメソッドを使って設定されたフィルタリング基準内に収まっているかどうかをチェックするためにFilteredRowSetオブジェクトによって呼び出されます。
    boolean
    このメソッドは、通常、RowSetオブジェクトのカーソルが次の行へ移動するのを制御するFilteredRowSetオブジェクトの内部メソッド(非public)から呼び出されます。
  • メソッドの詳細

    • evaluate

      boolean evaluate(RowSet rs)
      このメソッドは、通常、RowSetオブジェクトのカーソルが次の行へ移動するのを制御するFilteredRowSetオブジェクトの内部メソッド(非public)から呼び出されます。 この内部メソッドが、カーソルをすでに削除された行へ移動した場合、内部メソッドは有効な行が見つかるまでカーソルの移動を続けます。
      パラメータ:
      rs - 評価するRowSet
      戻り値:
      フィルタにまだ列がある場合はtrue、そうでない場合はfalse
    • evaluate

      boolean evaluate(Object value, int column) throws SQLException
      このメソッドは、値がsetFilter()メソッドを使って設定されたフィルタ・リング基準(複数の制約が存在する場合は複数の基準)内に収まっているかどうかをチェックするために、FilteredRowSetオブジェクトによって呼び出されます。

      FilteredRowSetオブジェクトは、FilteredRowSetインスタンスに新しい行を挿入するとき、このメソッドを内部で使用します。

      パラメータ:
      value - このFilterRowSetオブジェクトに追加できるかどうかチェックする必要があるObject値。
      column - このRowSetオブジェクトの列のSQLインデックスに一致する必要があるintオブジェクト。 これは、Predicateの初期化時に、フィルタ・リングのため、列の1つとしてPredicateに渡されている必要がある
      戻り値:
      行の値がフィルタ内に収まる場合はtrue、そうでない場合はfalse
      例外:
      SQLException - 列がフィルタ・リング基準内にない場合
    • evaluate

      boolean evaluate(Object value, String columnName) throws SQLException
      このメソッドは、値がsetFilterメソッドを使って設定されたフィルタリング基準内に収まっているかどうかをチェックするためにFilteredRowSetオブジェクトによって呼び出されます。

      FilteredRowSetオブジェクトは、FilteredRowSetインスタンスに新しい行を挿入するとき、このメソッドを内部で使用します。

      パラメータ:
      value - このFilterRowSetに追加できるかどうかチェックする必要があるObject値。
      columnName - このRowSetの列のSQL名に一致する必要があるStringオブジェクト。アルファベットの大文字と小文字は区別されない。 これは、Predicateの初期化時に、フィルタ・リングのため、列の1つとしてPredicateに渡されている必要がある
      戻り値:
      値がフィルタ内に収まる場合はtrue、そうでない場合はfalse
      例外:
      SQLException - 列がフィルタ・リング基準内にない場合