モジュール 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