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>