骑猪闯天下

J2ME随笔,记录成长的脚步

统计

留言簿(3)

阅读排行榜

评论排行榜

[J2ME-原创] RMS遍历类RecordFilter和RecordComparator用法

        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, nullfalse); //过滤条件是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>

posted on 2008-09-01 09:23 骑猪闯天下 阅读(1263) 评论(1)  编辑  收藏

评论

# re: [J2ME-原创] RMS遍历类RecordFilter和RecordComparator用法 2008-12-13 13:41 喝可乐的懒猫

Very good!  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: