JavaTM 2 Platform
Standard Ed. 5.0

javax.sql.rowset
インタフェース Predicate


public interface Predicate

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

1.0 背景

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

2.0 実装のガイドライン

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

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


 
    public class Range implements Predicate {

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

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

      public boolean evaluate(RowSet rs) {
          CachedRowSet crs = (CachedRowSet)rs;
          boolean bool1,bool2;           
       
          // Check the present row determine if it lies
          // within the filtering criteria. 
      
          for (int i = 0; i < idx.length; i++) {
        
                if ((rs.getObject(idx[i]) >= lo[i]) && 
                  (rs.getObject(idx[i]) >= hi[i]) { 
                    bool1 = true; // within filter constraints
          } else {
            bool2 = true; // outside of filter constraints             
          } 
      }
      
      if (bool2) {
         return false;
      } else {
         return true;
      }
  }          
 
 

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


メソッドの概要
 boolean evaluate(Object value, int column)
          このメソッドは、setFilter() メソッドを使用して設定されたフィルタ基準 (または複数の制約が存在する場合の基準) 範囲に値があるかどうかを調べる FilteredRowSet オブジェクトによって呼び出されます。
 boolean evaluate(Object value, String columnName)
          このメソッドは、値が setFileter メソッドを使って設定されたフィルタリング基準内に収まっているかどうかをチェックするために FilteredRowSet オブジェクトによって呼び出されます。
 boolean evaluate(RowSet rs)
          このメソッドは、通常、RowSet オブジェクトのカーソルが次の行へ移動するのを制御する FilteredRowSet オブジェクトの内部メソッド (非 public) から呼び出されます。
 

メソッドの詳細

evaluate

boolean evaluate(RowSet rs)
このメソッドは、通常、RowSet オブジェクトのカーソルが次の行へ移動するのを制御する FilteredRowSet オブジェクトの内部メソッド (非 public) から呼び出されます。この内部メソッドが、カーソルをすでに削除された行へ移動した場合、内部メソッドは有効な行が見つかるまでカーソルの移動を続けます。

戻り値:
フィルタにまだ列がある場合は true、そうでない場合は false

evaluate

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

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

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

evaluate

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

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

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

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。