Module  java.sql.rowset
软件包  javax.sql.rowset

Interface FilteredRowSet

  • All Superinterfaces:
    AutoCloseableCachedRowSetJoinableResultSetRowSetWebRowSetWrapper


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

    1.0背景

    有些情况下, RowSet对象需要为其内容提供一定程度的过滤。 一个可能的解决方案是为所有标准的RowSet实现提供查询语言; 然而,对于诸如断开连接的RowSet对象的轻量级组件,这是一种不切实际的方法。 FilteredRowSet接口旨在满足此需求,而不提供重量级查询语言以及这种查询语言将需要的处理。

    JDBC FilteredRowSet标准实现实现了RowSet接口,并扩展了CachedRowSet ¢类。 CachedRowSet类提供了一组受保护的游标操作方法,其中一个FilteredRowSet实现可以覆盖以提供过滤支持。

    2.0谓词共享

    如果在父接口中使用继承的createShared方法共享FilteredRowSet实现,那么Predicate应该由所有FilteredRowSet实例克隆共享,而无需修改。

    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() // only names from "Alpha" to "Bravo" will be returned  
    在上面的例子中,我们初始化一个实现Predicate接口的Range对象。 该对象表示以下约束:从该FilteredRowSet对象输出或修改的所有行必须位于“columnName”列之间的值“Alpha”和“Bravo”两个值之间。 如果将过滤器应用于不包含在过滤器范围内的数据的FilteredRowSet对象,则不返回任何行。

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

    4.0更新FilteredRowSet对象

    一个上设置的谓词FilteredRowSet对象适用于在所有行的标准RowSet对象的管理行的一个子集RowSet对象。 此标准管理可见的行的子集,并且还定义可以修改,删除或插入哪些行。

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

    可以随时通过将新的Predicate对象应用于FilteredRowSet实例来修改FilteredRowSet范围标准。 如果没有检测到对FilteredRowSet对象的附加引用,这是可能的。 新的过滤器对FilteredRowSet对象中的标准执行立即产生影响,所有后续视图和更新都将受到类似的强制执行。

    5.0过滤器外的行的行为

    FilteredRowSet对象上设置的过滤器之外的行不能被修改,直到过滤器被移除或应用了一个新的过滤器。

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

    从以下版本开始:
    1.5
    • 方法详细信息

      • setFilter

        void setFilter​(Predicate p)
                throws SQLException
        将给定的Predicate对象应用于此FilteredRowSet对象。 过滤器对入站和出站视图都应用控件,约束哪些行是可见的,哪些行可以被操纵。

        可以随时设置新的Predicate对象。 这具有改变RowSet对象数据的约束的作用。 此外,在运行时修改过滤器可能会导致多个组件可能在一个FilteredRowSet对象上运行的问题。 Predicate对象变化时,应用程序开发人员必须负责管理FilteredRowSet对象的多个句柄。

        参数
        p - 一个Predicate对象定义此FilteredRowSet对象的过滤器。 设置值将清除谓词,允许所有行变为可见。
        异常
        SQLException - 如果在设置 Predicate对象时发生错误
      • getFilter

        Predicate getFilter​()
        检索此 FilteredRowSet对象的活动过滤器。
        结果
        p Predicate为这FilteredRowSet对象; null如果没有设置过滤器。