public interface Predicate
为所有 FilteredRowSet
对象提供框架以描述其过滤器的标准接口。
Predicate
接口是一个标准接口,应用程序可以实现它来定义希望应用于
FilteredRowSet
对象的过滤器。
FilteredRowSet
对象使用此接口的实现并实施在
evaluate
方法的实现中定义的各种约束。
FilteredRowSet
对象以双向方式实施过滤器约束:它只输出过滤器的约束中存在的行;反之,也只插入、修改或更新过滤器的约束中存在的行。
FilteredRowSet
提供 predicate,则必须实现此接口。此时,JDBC RowSet Implementations (JSR-114) 不指定任何标准过滤器定义。通过为要使用
FilteredRowSet
接口的参考实现和供应商实现来定义和部署的过滤器范围指定一个标准的方法与机制,此接口允许形成一个应用程序驱动的
Predicate
的灵活实现。
示例实现如下所示:
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;
}
}
上述示例实现一个简单的范围 predicate。注意,实现应该(但不是必须)提供基于 String
和整数索引的构造方法,供同时使用两种列标识约定的 JDBC RowSet Implementation 应用程序使用。
方法摘要 | |
---|---|
boolean |
evaluate(Object value, int column) FilteredRowSet 对象调用此方法来检查值是否位于使用 setFilter() 方法设置的过滤标准(或标准,如果存在多个约束)中。 |
boolean |
evaluate(Object value, String columnName) FilteredRowSet 对象调用此方法来检查值是否位于使用 setFilter 方法设置的过滤标准中。 |
boolean |
evaluate(RowSet rs) 此方法通常称为 FilteredRowSet 对象内部方法(非公共),它控制 RowSet 对象的指针从一行移动到下一行。 |
方法详细信息 |
---|
boolean evaluate(RowSet rs)
FilteredRowSet
对象内部方法(非公共),它控制
RowSet
对象的指针从一行移动到下一行。此外,如果此内部方法将指针移动到一个已删除的行上,则其将继续移动指针,直到找到一个有效行为止。
true
;否则返回
false
boolean evaluate(Object value, int column) throws SQLException
FilteredRowSet
对象调用此方法来检查值是否位于使用
setFilter()
方法设置的过滤标准(或标准,如果存在多个约束)中。
向 FilteredRowSet
实例插入新行时,FilteredRowSet
对象将在内部使用此方法。
value
- 一个
Object
值,需要检查其是否可以为
FilterRowSet
对象的一部分。
column
- 一个
int
对象,必须与此
RowSet
对象中列的 SQL 索引相匹配。初始化
Predicate
时,此值必须已作为要过滤的列之一传递给
Predicate
true
;否则返回
false
SQLException
- 如果列不是过滤标准的一部分
boolean evaluate(Object value, String columnName) throws SQLException
FilteredRowSet
对象调用此方法来检查值是否位于使用 setFilter 方法设置的过滤标准中。
向 FilteredRowSet
实例插入新行时,FilteredRowSet
对象将在内部使用此方法。
value
- 一个
Object
值,需要检查其是否可以为
FilterRowSet
对象的一部分。
columnName
- 一个
String
对象,必须与此
RowSet
中列的 SQL 名称相匹配(忽略大小写)。初始化
Predicate
时,此值必须作为要过滤的列之一传递给
Predicate
。
true
;否则,返回
false
。
SQLException
- 如果列不是过滤标准的一部分