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
このメソッドは、値がsetFilter()
メソッドを使って設定されたフィルタ・リング基準(複数の制約が存在する場合は複数の基準)内に収まっているかどうかをチェックするために、FilteredRowSet
オブジェクトによって呼び出されます。boolean
このメソッドは、値が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
- 列がフィルタ・リング基準内にない場合
-