javax.sql.rowset

接口
异常
public interface Predicate

为所有 FilteredRowSet 对象提供框架以描述其过滤器的标准接口。

1.0 背景

Predicate 接口是一个标准接口,应用程序可以实现它来定义希望应用于 FilteredRowSet 对象的过滤器。 FilteredRowSet 对象使用此接口的实现并实施在 evaluate 方法的实现中定义的各种约束。 FilteredRowSet 对象以双向方式实施过滤器约束:它只输出过滤器的约束中存在的行;反之,也只插入、修改或更新过滤器的约束中存在的行。

2.0 实现指南

要为 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 对象的指针从一行移动到下一行。
 

方法详细信息

evaluate

boolean evaluate(RowSet rs)
此方法通常称为 FilteredRowSet 对象内部方法(非公共),它控制 RowSet 对象的指针从一行移动到下一行。此外,如果此内部方法将指针移动到一个已删除的行上,则其将继续移动指针,直到找到一个有效行为止。

返回:
如果在过滤器中存在更多行,则返回 true;否则返回 false

evaluate

boolean evaluate(Object value,
                 int column)
                 throws SQLException
FilteredRowSet 对象调用此方法来检查值是否位于使用 setFilter() 方法设置的过滤标准(或标准,如果存在多个约束)中。

FilteredRowSet 实例插入新行时,FilteredRowSet 对象将在内部使用此方法。

参数:
value - 一个 Object 值,需要检查其是否可以为 FilterRowSet 对象的一部分。
column - 一个 int 对象,必须与此 RowSet 对象中列的 SQL 索引相匹配。初始化 Predicate 时,此值必须已作为要过滤的列之一传递给 Predicate
返回:
如果行值位于过滤器中,则返回 true;否则返回 false
抛出:
SQLException - 如果列不是过滤标准的一部分

evaluate

boolean evaluate(Object value,
                 String columnName)
                 throws SQLException
FilteredRowSet 对象调用此方法来检查值是否位于使用 setFilter 方法设置的过滤标准中。

FilteredRowSet 实例插入新行时,FilteredRowSet 对象将在内部使用此方法。

参数:
value - 一个 Object 值,需要检查其是否可以为 FilterRowSet 对象的一部分。
columnName - 一个 String 对象,必须与此 RowSet 中列的 SQL 名称相匹配(忽略大小写)。初始化 Predicate 时,此值必须作为要过滤的列之一传递给 Predicate
返回:
如果值位于过滤器中,则返回 true;否则,返回 false
抛出:
SQLException - 如果列不是过滤标准的一部分