程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> RMS遍歷類RecordFilter和RecordComparator用法

RMS遍歷類RecordFilter和RecordComparator用法

編輯:關於JAVA

RMS提供的遍歷類RecordEnumeration,構造函數原型如下:

Public RecordEnumeration enumerateRecords (RecordFilter filter, RecordComparator comparator, boolean keepUpdated)

第一個參數是RecordFilter,它就是用來篩選數據庫中的紀錄的,篩選的條件就是我們需要定義的方法,boolean matches(byte[] data),如果不指定就不篩選。

第二個參數是RecordComparator,它是對選擇出來的數據進行排序的,如果你不指定的話就按照默認的順序排序。

第三個參數是boolean類型的,如果是true的話,那麼record會跟蹤rms中的數據變化,這是比較昂貴的開銷,我一般都是用false的。

一般來說,用最簡單的即可:RecordEnumeration enumerateRecords(null, null, false);

RMS中遍歷RecordEnumeration經常用到,其中接口RecordFilter經常用,RecordComparator也會用到,但不多,現分別小結如下:

一。接口RecordFilter的使用

在 enumerateRecords 方法中,fifter為過濾參數,需要自己定義一個繼承RecordFilter接口的過濾類,在類裡面定義需要過濾的條件。RecordFilter接口只有一個需要實現的接口函數,函數原型如下:

public boolean matches (byte[] candidate)

實現一個 RecordFilter 接口的過濾類的基本結構如下:

  public class MyFilter implements RecordFilter {
    public boolean matches(byte[] rec) {}
    }

例:創建一個查找匹配字符“Hello”記錄的MyFilter類的具體代碼如下:

  public class MyFilter implements RecordFilter
  {
    public boolean matches(byte[] rec)
    {
      String str = new String(rec);
      if(str.equals("Hello") )
      {
        return true;
      }else{
        return false;
      }
    }
  }

具體使用MyFilter類的代碼如下:

  RecordStore rs;
  RecordFilter rf = new MyFilter();
  //創建rs對象的代碼略
  RecordEnumeration re = null;
  try {
    re = rs.enumetateRecords(rf, null, false); //過濾條件是rf
    if (re.hasNextElement()){
      recordID = re.nextRecordId();
    }
  }catch(Exception e) {
  }

二。排序接口RecordComparator也會用到,雖然不多,也做一小結吧:

排序RecordComparator接口也有一個需要實現的接口函數,原型如下:

public int compare (byte[] rec1, byte[] rec2)

rec1, rec2 分別指需要比較的兩條記錄的二進制數據,比較的結果返回一個int型數值,數值有三種可能:

RecordComparator.PRECEDES   : rec1在rec2之前

RecordComparator.FOLLOWS    : rec1在rec2之後

RrcordComparator.EQUIVALENT  : 位置相等

實現一個RecordComparator接口的比較類基本結構如下:

  public class MyComparator implements RecordComparator {
    public int compare(byte[] rec1, byte[] rec2) {}
  }

例:一個2條記錄字符串從小到大排序比較的代碼如下:

  public class MyComparator implements RecordComparator {

    public int compare(byte[] rec1, byte[] rec2)
    {
      String str1 = new String(rec1);
      String str2 = new String(rec2);
      int result = str1.compareTo(str2);

      if (result == 0) {
        return RecordComparator.EQUIVALENT;
      } else if (result < 0) {
        return RecordComparator.PRECEDES;
      } else {
        return RecordComparator.FOLLOWS;
      }
    }
  }

具體使用MyComparator類的代碼如下:

  RecordStore rs;
  RecordComparator rc = new RecordComparator ();
  //創建rs對象的代碼略
  RecordEnumeration re = null;

  try {
    re = rs.enumerateRecords(null, rc, false);
    if (re.hasNextElement()) {
      recordID = re.nextRecordId();
    }
  }catch (Exception e) {}

<End>
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved