Predicate
Predicate (필터 프레임워크)
모든 FilteredRowSet 객체가 자신의 필터를 설명할 수 있게 해 주는 기본 프레임워크를 제공하는 표준 인터페이스입니다.
본문
Predicate 인터페이스는 애플리케이션이 FilteredRowSet 객체에 적용할 필터를 정의하기 위해 구현하는 표준 인터페이스입니다. FilteredRowSet 객체는 이 인터페이스의 구현을 소비하고, evaluate 메서드 구현에 정의된 제약을 시행해요. FilteredRowSet 객체는 필터 제약을 양방향으로 시행합니다. 필터 제약 안에 있는 행만 출력하고, 역으로 필터 제약 안에 있는 행만 삽입·수정·갱신합니다.
현재 JDBC RowSet 구현(JSR-114)은 표준 필터 정의를 지정하지 않기 때문에, 다양한 필터 범위를 참조·공급업체 구현과 함께 정의하고 배포할 표준 수단과 메커니즘을 지정함으로써 애플리케이션 주도의 유연한 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 to 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) {
return false;
}
if (value < lo[i] && value > hi[i]) {
return false;
}
}
return true;
}
}
boolean evaluate(RowSet rs)
boolean evaluate(Object value, int column) throws SQLException
boolean evaluate(Object value, String columnName) throws SQLException
evaluate(RowSet)은 현재 행이 필터 기준 안에 있는지 판단하고, value를 받는 오버로드는 특정 컬럼의 값이 필터를 통과하는지 판단합니다. FilteredRowSet에 필터를 제공하려면 이 인터페이스를 구현해야 합니다.