public interface Predicate
FilteredRowSet
オブジェクトにフィルタを記述するフレームワークを提供する標準インタフェースです。
Predicate
インタフェースは、アプリケーションがFilteredRowSet
オブジェクトに適用するフィルタを定義するために実装できる標準インタフェースです。FilteredRowSet
オブジェクトは、このインタフェースの実装を使用し、evaluate
メソッドの実装に定義された制約を適用します。FilteredRowSet
オブジェクトはフィルタの制約を双方向に適用します。つまり、フィルタの制約内の行のみを出力するほか、逆方向についてもフィルタの制約内の行のみを挿入、変更または更新します。
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
および整数インデックス・ベースのコンストラクタを提供すべきですが、これは必須ではありません。
修飾子と型 | メソッドと説明 |
---|---|
boolean |
evaluate(Object value, int column)
このメソッドは、値が
setFilter() メソッドを使って設定されたフィルタ・リング基準(複数の制約が存在する場合は複数の基準)内に収まっているかどうかをチェックするために、FilteredRowSet オブジェクトによって呼び出されます。 |
boolean |
evaluate(Object value, String columnName)
このメソッドは、値がsetFileterメソッドを使って設定されたフィルタ・リング基準内に収まっているかどうかをチェックするために
FilteredRowSet オブジェクトによって呼び出されます。 |
boolean |
evaluate(RowSet rs)
このメソッドは、通常、
RowSet オブジェクトのカーソルが次の行へ移動するのを制御するFilteredRowSet オブジェクトの内部メソッド(非public)から呼び出されます。 |
boolean evaluate(RowSet rs)
RowSet
オブジェクトのカーソルが次の行へ移動するのを制御するFilteredRowSet
オブジェクトの内部メソッド(非public)から呼び出されます。この内部メソッドが、カーソルをすでに削除された行へ移動した場合、内部メソッドは有効な行が見つかるまでカーソルの移動を続けます。rs
- 評価するRowSet
true
、そうでない場合はfalse
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
- 列がフィルタ・リング基準内にない場合boolean evaluate(Object value, String columnName) throws SQLException
FilteredRowSet
オブジェクトによって呼び出されます。
FilteredRowSet
オブジェクトは、FilteredRowSet
インスタンスに新しい行を挿入するとき、このメソッドを内部で使用します。
value
- このFilterRowSet
に追加できるかどうかチェックする必要があるObject
値。columnName
- このRowSet
の列のSQL名に一致する必要があるString
オブジェクト。アルファベットの大文字と小文字は区別されない。これは、Predicate
の初期化時に、フィルタ・リングのため、列の1つとしてPredicate
に渡されている必要があるtrue
、そうでない場合はfalse
SQLException
- 列がフィルタ・リング基準内にない場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.