Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5406154
  • 博文数量: 763
  • 博客积分: 12108
  • 博客等级: 上将
  • 技术积分: 15717
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-28 21:21
个人简介

业精于勤,荒于嬉

文章分类

全部博文(763)

文章存档

2018年(6)

2017年(15)

2016年(2)

2015年(31)

2014年(14)

2013年(87)

2012年(75)

2011年(94)

2010年(190)

2009年(38)

2008年(183)

2007年(28)

分类: Java

2010-02-22 17:45:23

RecordStoreRMS)简介

    javax.microedition.rms 这个包提供给J2ME Application一个小型的数据库, RecordStore就是这个包的核心。原则上在一个MIDlet中可以放置多个RecordStore,同一个MIDlet suite中可以共享同一个RecordStore进行存取,不同的MIDlet suite不能存取同一个MIDlet suite

 

它的诸多特性如下:  

  在MIDlet suite中每一个RecordStore的名称是唯一的,不能重复,而不同的MIDlet suite可以使用同名的RecordStore

  创建RecordStore名称时,字母是区分大小写的,且名称字符串不能超过32个字符。

  

基本存储读取模式:

    RecordStore由多条记录(Record)所组成。

 

    key1|content;key2|content;key2|content...

    就是 key|content pair, 这个pair算一条记录。

 

创建RecordStoreRMS)对象

    使用RecordStore.openRecordStore函数,打开一个存储对象并取得句柄rs,然后使用rs.addRecord向存储对象中添加记录,最后关闭存储对象rs.closeRecordStore,完成初始化过程。

 

view plaincopy to clipboardprint?

public void initRecord(){  

    //--------------------------  

    //--- Initialize RecordStore  

    //--------------------------  

    RecordStore rs = null;  

    String[] strData = null;  

    int n;  

    try{  

        rs = RecordStore.openRecordStore("history", true);  

        strData = new String[]{""};  

 

        // history.1 = history data  

         

        n = strData.length - rs.getNumRecords();  

        for (int i = (strData.length - n); i < strData.length; i ++){  

            rs.addRecord(strData[i].getBytes(), 0, strData[i].getBytes().length);  

        }  

        rs.closeRecordStore();  

 

    }catch(Exception e){  

        System.out.println("RecInitErr: " + e.toString());  

        if (rs != null){  

            try{  

                rs.closeRecordStore();  

            }catch(Exception e2){}  

        }  

    }  

    strData = null;  

} 

public void initRecord(){

    //--------------------------

    //--- Initialize RecordStore

    //--------------------------

    RecordStore rs = null;

    String[] strData = null;

    int n;

    try{

        rs = RecordStore.openRecordStore("history", true);

        strData = new String[]{""};

 

        // history.1 = history data

      

        n = strData.length - rs.getNumRecords();

        for (int i = (strData.length - n); i < strData.length; i ++){

            rs.addRecord(strData[i].getBytes(), 0, strData[i].getBytes().length);

        }

        rs.closeRecordStore();

 

    }catch(Exception e){

        System.out.println("RecInitErr: " + e.toString());

        if (rs != null){

            try{

                rs.closeRecordStore();

            }catch(Exception e2){}

        }

    }

    strData = null;

}

 

存储RecordStoreRMS)对象

需要一个索引ID和所需要存储的内容strData,这个过程需要把整个RMS打开,寻找拥有这个索引IDrecord。如果找到了,就更新这个record; 如果没有,就新建立一个。

 

参数String strName是存储对象名

 

参数String strData是需要存储的字符串

 

参数int intID是该字符的索引ID

 

首先,判断存储对象是否存在,如果存在,使用rsWrite.setRecord方法来更新存储对象。

 

view plaincopy to clipboardprint?

public boolean writeRecord(String strName, String strData, int intID){  

    //----------------------------  

    //--- RecordStore的存储  

    //----------------------------  

    RecordStore rsWrite = null;  

    try{  

        rsWrite = RecordStore.openRecordStore(strName, true);  

        byte[] bytWrite = strData.getBytes();  

        if (rsWrite.getNumRecords() == 0){  

            //--- RecordStore不存在,则生成之  

              rsWrite.addRecord(bytWrite, 0, bytWrite.length);  

        }else{  

            //--- RecordStore更新  

              rsWrite.setRecord(intID, bytWrite, 0, bytWrite.length);  

        }  

        rsWrite.closeRecordStore();  

        return true;  

    }catch(Exception e){  

        if (rsWrite != null){  

            try{  

                rsWrite.closeRecordStore();  

            }catch(Exception e2){}  

        }  

        return false;  

    }  

} 

public boolean writeRecord(String strName, String strData, int intID){

    //----------------------------

    //--- RecordStore的存储

    //----------------------------

    RecordStore rsWrite = null;

    try{

        rsWrite = RecordStore.openRecordStore(strName, true);

        byte[] bytWrite = strData.getBytes();

        if (rsWrite.getNumRecords() == 0){

            //--- RecordStore不存在,则生成之

              rsWrite.addRecord(bytWrite, 0, bytWrite.length);

        }else{

            //--- RecordStore更新

              rsWrite.setRecord(intID, bytWrite, 0, bytWrite.length);

        }

        rsWrite.closeRecordStore();

        return true;

    }catch(Exception e){

        if (rsWrite != null){

            try{

                rsWrite.closeRecordStore();

            }catch(Exception e2){}

        }

        return false;

    }

}

 

读取RecordStoreRMS)对象

只需要提供 索引ID 然后打开 RMS 寻找拥有这个索引IDrecord,如果找到了就重组成数据,不然就是没有这个record

 

参数String strName是读取对象名

 

参数int intID是读取索引ID

 

返回值String是需要读取的字符串

 

view plaincopy to clipboardprint?

public String readRecord(String strName, int intID){  

    //----------------------------   

    //--- RecordStore的读取  

    //----------------------------  

    RecordStore rsRead = null;  

    try{  

        rsRead = RecordStore.openRecordStore(strName, false);  

        byte[] bytRead = rsRead.getRecord(intID);  

        rsRead.closeRecordStore();  

        return new String(bytRead);  

    }catch(Exception e){  

        if (rsRead != null){  

            try{  

                rsRead.closeRecordStore();  

            }catch(Exception e2){}  

        }  

        return "";  

    }  

} 

public String readRecord(String strName, int intID){

    //----------------------------

    //--- RecordStore的读取

    //----------------------------

    RecordStore rsRead = null;

    try{

        rsRead = RecordStore.openRecordStore(strName, false);

        byte[] bytRead = rsRead.getRecord(intID);

        rsRead.closeRecordStore();

        return new String(bytRead);

    }catch(Exception e){

        if (rsRead != null){

            try{

                rsRead.closeRecordStore();

            }catch(Exception e2){}

        }

        return "";

    }

}

 

说明:

    J2ME Application/Game中,RMS经常用到。一些特殊的参数或者游戏的状态可以用RMS存储起来, 到用的时候读取就行了。

阅读(2456) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~