public interface FilteredRowSet
所有标准 FilteredRowSet
实现都必须实现的标准接口。FilteredRowSetImpl
类提供了可在需要时扩展的参考实现。另外,供应商可通过实现此接口来随意实现其自己的版本。
RowSet
对象需要对其内容进行某种程度的过滤。一种可能的解决方案是为所有标准的
RowSet
实现提供一种查询语言;但是这对诸如非连接
RowSet
对象之类的轻量级组件而言是一种不切实际的方法。
FilteredRowSet
接口寻求在不提供重量级查询语言和这种查询语言所需处理的情况下解决这一需求问题。
JDBC FilteredRowSet
标准实现可实现 RowSet
接口并扩展 CachedRowSet
TM 类。CachedRowSet
类提供了一组受保护的光标操纵方法,FilteredRowSet
实现可重写这些方法将来提供过滤支持。
createShared
方法共享了
FilteredRowSet
实现,则应所有
FilteredRowSet
实例副本应共享
Predicate
并不做任何修改。
通过实现 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
在上面的示例中,我们初始化了一个
Range
对象,它实现了
Predicate
接口。此对象表示以下约束条件:从此
FilteredRowSet
对象输出或修改的所有行必须在列 'columnName' 中,在值 'Alpha' 和 'Bravo' 之间(包括这两个值)。如果对不包含过滤器范围内的数据的
FilteredRowSet
对象应用过滤器,则不返回任何行。
此框架允许多个类实现 predicate,从而能以组合方式使用其来达到所需的过滤结果,无需进行查询语言处理。
FilteredRowSet
对象FilteredRowSet
对象上设置的 predicate 对
RowSet
对象中的所有行应用了一个标准,用来管理
RowSet
对象中的一个行子集。此标准控制可见的行子集,定义可以被修改、删除或插入的列。
因此,必须将 FilteredRowSet
对象上设置的 predicate 视为双向的,将设置的标准视为 FilteredRowSet
对象的所有视图和更新的控制机制。试图更新违反该标准的 FilteredRowSet
将导致抛出 SQLException
对象。
可在任何时间向 FilteredRowSet
实例应用新的 Predicate
对象来修改 FilteredRowSet
范围标准。如果没有检测到对 FilteredRowSet
对象的任何附加引用,则修改范围标准是可能的。新的过滤器对 FilteredRowSet
对象内所执行的标准会立即产生影响,所有后续视图和更新都将受到类似执行的影响。
FilteredRowSet
对象上设置的过滤器范围外的各行。
此外,只有位于过滤器范围内的各行才与数据源同步。
字段摘要 |
---|
从接口 javax.sql.rowset.WebRowSet 继承的字段 |
---|
PUBLIC_XML_SCHEMA, SCHEMA_SYSTEM_ID |
从接口 javax.sql.rowset.CachedRowSet 继承的字段 |
---|
COMMIT_ON_ACCEPT_CHANGES |
方法摘要 | |
---|---|
Predicate |
getFilter() 获取此 FilteredRowSet 对象的活动过滤器。 |
void |
setFilter(Predicate p) 将给定的 Predicate 对象应用到此 FilteredRowSet 对象。 |
从接口 javax.sql.rowset.WebRowSet 继承的方法 |
---|
readXml, readXml, writeXml, writeXml, writeXml, writeXml |
从接口 java.sql.Wrapper 继承的方法 |
---|
isWrapperFor, unwrap |
从接口 javax.sql.rowset.Joinable 继承的方法 |
---|
getMatchColumnIndexes, getMatchColumnNames, setMatchColumn, setMatchColumn, setMatchColumn, setMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn |
方法详细信息 |
---|
void setFilter(Predicate p) throws SQLException
Predicate
对象应用到此
FilteredRowSet
对象。过滤器同时控制入境 (inbound) 视图和出境 (outbound) 视图,限制哪些行是可见的,哪些行是可以操作的。
可以在任何时间设置新的 Predicate
对象。这样可以更改 RowSet
对象数据上的约束条件。另外,在运行时修改过滤器会出现问题,所以多个组件可以在一个 FilteredRowSet
对象上进行操作。当 FilteredRowSet
对象的底层 Predicate
对象更改时,应用程序开发人员必须负责管理对 FilteredRowSet 对象的多重处理。
p
-
Predicate
对象,它定义了此
FilteredRowSet
对象的过滤器。设置
null 值将清除 predicate,允许所有行成为可见行。
SQLException
- 如果在设置
Predicate
对象时发生错误
Predicate getFilter()
FilteredRowSet
对象的活动过滤器。
FilteredRowSet
对象的
Predicate
;如果没有设置过滤器,则返回
null
。