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 {<br /> public boolean matches(byte[] rec) {}<br /> }
例:创建一个查找匹配字符“Hello”记录的MyFilter类的具体代码如下:
public class MyFilter implements RecordFilter<br /> {<br /> public boolean matches(byte[] rec)<br /> {<br /> String str = new String(rec);<br /> if(str.equals("Hello") )<br /> {<br /> return true;<br /> }else{<br /> return false;<br /> }<br /> }<br /> }
具体使用MyFilter类的代码如下:
RecordSTore rs;<br /> RecordFilter rf = new MyFilter();<br /> //创建rs对象的代码略<br /> RecordEnumeration re = null;<br /> try {<br /> re = rs.enumetateRecords(rf, null, false); //过滤条件是rf<br /> if (re.hasNextElement()){<br /> recordID = re.nextRecordId();<br /> }<br /> }catch(Exception e) {<br /> }
二。排序接口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 {<br /> public int compare(byte[] rec1, byte[] rec2) {}<br /> }
例:一个2条记录字符串从小到大排序比较的代码如下:
public class MyComparaTor implements RecordComparaTor {<br /><br /> public int compare(byte[] rec1, byte[] rec2)<br /> {<br /> String str1 = new String(rec1);<br /> String str2 = new String(rec2);<br /> int result = str1.compareTo(str2);<br /><br /> if (result == 0) {<br /> return RecordComparaTor.EQUIVALENT;<br /> } else if (result < 0) {<br /> return RecordComparaTor.PRECEDES;<br /> } else {<br /> return RecordComparaTor.FOLLOWS;<br /> }<br /> }<br /> }
具体使用MyComparaTor类的代码如下:
RecordSTore rs;<br /> RecordComparaTor rc = new RecordComparaTor ();<br /> //创建rs对象的代码略<br /> RecordEnumeration re = null;<br /><br /> try {<br /> re = rs.enumerateRecords(null, rc, false);<br /> if (re.hasNextElement()) {<br /> recordID = re.nextRecordId();<br /> }<br /> }catch (Exception e) {}<br /><br /><End>
生活不是等待风暴过去,而是学会在雨中翩翩起舞。