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

Interface FilteredRowSet

所有超级接口:
AutoCloseable, CachedRowSet, Joinable, ResultSet, RowSet, WebRowSet, Wrapper

public interface FilteredRowSet extends WebRowSet
所有标准的FilteredRowSet实现必须实现的标准接口。 FilteredRowSetImpl类提供了参考实现,如果需要,可以进行扩展。或者,供应商可以通过实现此接口来自由实现自己的版本。

1.0 背景

有时RowSet对象需要对其内容进行一定程度的过滤。一种可能的解决方案是为所有标准RowSet实现提供查询语言;然而,对于断开连接的RowSet对象等轻量级组件,这是一种不切实际的方法。 FilteredRowSet接口旨在解决这一需求,而无需提供重量级查询语言以及该查询语言所需的处理。

JDBC FilteredRowSet标准实现实现了RowSet接口并扩展了CachedRowSet类。 CachedRowSet类提供了一组受保护的游标操作方法,FilteredRowSet实现可以重写这些方法以提供过滤支持。

2.0 谓词共享

如果使用父接口中继承的createShared方法共享FilteredRowSet实现,则所有FilteredRowSet实例克隆都应共享不经修改的Predicate

3.0 用法

通过实现Predicate(请参阅Predicate类JavaDoc中的示例),可以按照以下描述使用FilteredRowSet

 
     FilteredRowSet frs = new FilteredRowSetImpl();
     frs.populate(rs);

     Range name = new Range("Alpha", "Bravo", "columnName");
     frs.setFilter(name);

     frs.next() // 仅返回从"Alpha"到"Bravo"的名称
 
 
在上面的示例中,我们初始化了一个实现Predicate接口的Range对象。此对象表达了以下约束:从此FilteredRowSet对象输出或修改的所有行必须在'columnName'列中的'Alpha'和'Bravo'值之间,两个值都包括在内。如果对不包含在过滤器范围内的FilteredRowSet对象应用过滤器,则不会返回任何行。

此框架允许组合使用多个实现谓词的类,以实现所需的过滤结果,而无需进行查询语言处理。

4.0 更新FilteredRowSet对象

设置在FilteredRowSet对象上的谓词对RowSet对象中的所有行应用条件,以管理RowSet对象中的行子集。此条件管理可见的行子集,并定义哪些行可以被修改、删除或插入。

因此,在FilteredRowSet对象上设置的谓词必须被视为双向的,并且设置的条件作为所有视图和更新到FilteredRowSet对象的门控机制。任何试图更新违反条件的FilteredRowSet都将导致抛出SQLException对象。

FilteredRowSet范围条件可以通过在任何时间将新的Predicate对象应用于FilteredRowSet实例来修改。如果未检测到对FilteredRowSet对象的其他引用,则可以这样做。在FilteredRowSet对象内,新的过滤器立即影响条件执行,并且所有后续视图和更新都将受到类似的执行约束。

5.0 过滤器外行为

FilteredRowSet对象上设置的过滤器之外的行在移除过滤器或应用新过滤器之前无法修改。

此外,只有在过滤器范围内的行才会与数据源同步。

自版本:
1.5
  • Method Details

    • setFilter

      void setFilter(Predicate p) throws SQLException
      将给定的Predicate对象应用于此FilteredRowSet对象。该过滤器控制入站和出站视图,限制哪些行可见,哪些行可以操作。

      可以随时设置新的Predicate对象。这将改变RowSet对象数据的约束。此外,在运行时修改过滤器会出现问题,因为多个组件可能正在操作一个FilteredRowSet对象。应用程序开发人员必须负责管理对FilteredRowSet对象的多个句柄,当它们的底层Predicate对象发生变化时。

      参数:
      p - 为此FilteredRowSet对象定义过滤器的Predicate对象。设置为null值将清除谓词,使所有行可见。
      抛出:
      SQLException - 设置Predicate对象时发生错误时
    • getFilter

      Predicate getFilter()
      检索此FilteredRowSet对象的活动过滤器。
      返回:
      p为此FilteredRowSet对象的Predicate;如果未设置过滤器,则为null