Module java.sql.rowset
Package javax.sql.rowset

Interface Predicate


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 Type
    Method
    Description
    boolean
    evaluate(Object value, int column)
    这个方法由FilteredRowSet对象调用,以检查值是否介于使用setFilter()方法设置的过滤条件之间(如果存在多个约束,则为多个约束)。
    boolean
    evaluate(Object value, String columnName)
    这个方法由FilteredRowSet对象调用,以检查值是否介于使用setFilter方法设置的过滤条件之间。
    boolean
    这个方法通常由FilteredRowSet对象内部方法(非公共)调用,控制RowSet对象的游标从一行移动到下一行。
  • Method Details

    • evaluate

      boolean evaluate(RowSet rs)
      这个方法通常由FilteredRowSet对象内部方法(非公共)调用,控制RowSet对象的游标从一行移动到下一行。此外,如果这个内部方法将游标移动到已删除的行上,内部方法将继续移动游标,直到找到一个有效的行。
      参数:
      rs - 要评估的RowSet
      返回:
      如果过滤器中有更多行,则为true;否则为false
    • evaluate

      boolean evaluate(Object value, int column) throws SQLException
      这个方法由FilteredRowSet对象调用,以检查值是否介于使用setFilter()方法设置的过滤条件之间(如果存在多个约束,则为多个约束)。

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

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

      boolean evaluate(Object value, String columnName) throws SQLException
      这个方法由FilteredRowSet对象调用,以检查值是否介于使用setFilter方法设置的过滤条件之间。

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

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