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
- 如果列不是过滤条件的一部分
-