public interface Predicate
提供所有
FilteredRowSet对象框架描述其过滤器的标准接口。
1.0 背景
Predicate接口是一个标准接口,应用程序可以实现该接口来定义他们希望应用于FilteredRowSet对象的过滤器。 FilteredRowSet对象消耗该接口的实现并强制执行evaluate方法的实现中定义的约束。 FilteredRowSet对象以双向方式强制执行过滤器约束:仅输出符合过滤器约束的行;反之,仅插入、修改或更新符合过滤器约束的行。
2.0 实现指南
为了为FilteredRowSet提供一个谓词,必须实现该接口。目前,JDBC RowSet Implementations (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) {
// 检查当前行是否符合过滤条件。
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]) {
// 超出过滤器约束
return false;
}
}
// 在过滤器约束内
return true;
}
}
上面的示例实现了一个简单的范围谓词。请注意,实现应该但不是必须提供基于String和整数索引的构造函数,以提供给同时使用列标识约定的JDBC RowSet实现应用程序。
- 自:
- 1.5
-
Method Summary
Modifier and TypeMethodDescriptionboolean这个方法由FilteredRowSet对象调用,以检查值是否介于使用setFilter()方法设置的过滤条件之间(如果存在多个约束,则为多个约束)。boolean这个方法由FilteredRowSet对象调用,以检查值是否介于使用setFilter方法设置的过滤条件之间。boolean这个方法通常由FilteredRowSet对象内部方法(非公共)调用,控制RowSet对象的游标从一行移动到下一行。
-
Method Details
-
evaluate
这个方法通常由FilteredRowSet对象内部方法(非公共)调用,控制RowSet对象的游标从一行移动到下一行。此外,如果这个内部方法将游标移动到已删除的行上,内部方法将继续移动游标,直到找到一个有效的行。- 参数:
-
rs- 要评估的RowSet - 返回:
-
如果过滤器中有更多行,则为
true;否则为false
-
evaluate
这个方法由FilteredRowSet对象调用,以检查值是否介于使用setFilter()方法设置的过滤条件之间(如果存在多个约束,则为多个约束)。FilteredRowSet对象在向FilteredRowSet实例插入新行时将在内部使用此方法。- 参数:
-
value- 需要检查的Object值,是否可以成为此FilterRowSet对象的一部分。 -
column- 必须与此RowSet对象中列的SQL索引匹配的int对象。在初始化Predicate时,必须将其作为过滤的列之一传递给Predicate - 返回:
-
如果行值在过滤器内,则为
true;否则为false - 抛出:
-
SQLException- 如果列不是过滤条件的一部分
-
evaluate
这个方法由FilteredRowSet对象调用,以检查值是否介于使用setFilter方法设置的过滤条件之间。FilteredRowSet对象在向FilteredRowSet实例插入新行时将在内部使用此方法。- 参数:
-
value- 需要检查的Object值,是否可以成为此FilterRowSet的一部分。 -
columnName- 必须与此RowSet中列的SQL名称(不区分大小写)匹配的String对象。在初始化Predicate时,必须将其作为过滤的列之一传递给Predicate - 返回:
-
如果值在过滤器内,则为
true;否则为false - 抛出:
-
SQLException- 如果列不是过滤条件的一部分
-