JavaTM 2 Platform
Standard Ed. 6

javax.sql.rowset
介面 Predicate


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 - 如果列不是過濾標準的一部分

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only