import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.rms.InvalidRecordIDException;
import javax.microedition.rms.RecordComparator;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotFoundException;
import javax.microedition.rms.RecordStoreNotOpenException;
// RMS RescordManagement System 记录管理系统--是一种数据持久化机制
// RMS 就是一个小型的数据管理系统
// 特点:以简单的,类似表格的形式组织信息,并存储起来形成持久化存储,以供
// 应用程序在重新启动后继续使用!
// 概念: Records--记录
// Records Stores--记录仓储
// Records Stores :代表一组记录的集合;同一MIDlet ,每个仓储的名字是独一无二的 ;大小<32个Unicode字符
// 同一个MIDlet 可以共享这些记录仓储
// Record : 一条记录的组成:整型的RecordID ,代表数据的byte[] 组成
// RecordID: 每条记录的唯一标示;特点:RecordID 是每条记录的唯一标识,使用的是简单的单增算法,
// 对应的记录被删除后RecordID ,不会被使用,仓储中相邻的记录并不一定会有连续的ID
// 示例:RecordStroe 的管理 -
public class RMSTest extends MIDlet implements RecordComparator{
private RecordStore rs ;
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
try {
//RMS 的关闭:MIDlet 套件需要在RMS 的开启与关闭之间保持平衡
// 特点:打开了多少个仓储 , 就要有多少个关闭的方法
rs.closeRecordStore();
//delete RecordStore
//删除之前必须保证记录仓储是关闭的状态
RecordStore.deleteRecordStore("myRecordStore");
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
//start application
protected void startApp() throws MIDletStateChangeException {
// TODO Auto-generated method stub
try {
//RecordStore 通过静态方法来获取对象
// 参数:1、记录仓储名称 2、不存在时是否创建
//打开一个 RMS , 打开失败则创建
rs = RecordStore.openRecordStore("myRecordStore", true);
//添加记录
int id = addRecord("zhang张");
System.out.println("数据的记录ID 为:"+id);
//获取记录
System.out.println(getRecord(id));
//RecordStore 的方法,获取记录仓储的信息
System.out.println("记录仓储最后更新的时间是:"+rs.getLastModified());
System.out.println("获取已经打开了的记录仓储的名称:"+rs.getName());
System.out.println("获取当前记录仓储中记录的总数:"+rs.getNumRecords());
System.out.println("获取当前仓储中可用的字节数:"+rs.getSizeAvailable());
System.out.println("获取记录仓储的版本号:"+rs.getVersion());
System.out.println("获取该MIDlet套件中所有的记录仓储列表:"+rs.listRecordStores());
this.viewAll();
} catch (RecordStoreFullException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RecordStoreNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RecordStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//增加记录
//RecordStore 的基本操作:
// addRecord(byte[] data,int offset,int numBytes),参数:byte[]数组,传入数组的起始位置,传入数据长度
// addRecord(); 当数据添加成功后,方法将返回记录ID号,RecordID----简单增长
public int addRecord(String source){
int rec = -1; //初始化状态
//创建字节数组输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//创建数据输出流 --传入字节数组输出流对象
DataOutputStream dos = new DataOutputStream(baos);
try {
//写入数据
dos.writeUTF(source);
//关闭流
dos.close();
baos.close();
//获取byte 数组
byte[] bytes = baos.toByteArray();
System.out.println("bytes的数量为:"+bytes.length);
//添加记录
rec = rs.addRecord(bytes,0, bytes.length);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rec;
}
//获取数据
public String getRecord(int RecordID){
String record = "";
byte[] data;
try {
//通过记录ID 获取字节数组
data = rs.getRecord(RecordID);
//读出,获取数据
ByteArrayInputStream bais = new ByteArrayInputStream(data);
DataInputStream dis = new DataInputStream(bais);
record = dis.readUTF();
//关闭流
dis.close();
bais.close();
} catch (RecordStoreNotOpenException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidRecordIDException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RecordStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(Exception ex){
ex.printStackTrace();
}
return record;
}
//RecordStore 的高级部分
// 接口的使用:四个接口:RecordComparator,RecordEnumeration,RecordFilter ,RecordListener
//RecordEnumeration 遍历接口--可靠的走访方式
//案例:获取仓储中所有的单词
public String[] viewAll(){
System.out.println("欢迎进入RecordEnumeration遍历接口的测试.......");
String[] words = new String[0];
RecordEnumeration re = null;
//rs 记录仓储对象
if(rs==null){
return words;
}
try {
re = rs.enumerateRecords(null, null, false);
//re.numRecords(); 返回在当前遍历中可用的集合,也满足filter存在的时候
int recordSum = re.nextRecord().length;
System.out.println("当前集合中可用的记录数目为:"+recordSum);
words = new String[recordSum];
int wordRecords = 0;
while(re.hasNextElement()){ //hasNextElement(); 指定当前指向的位置还有没有记录
System.out.println("下一位置的记录拷贝为:"+re.nextRecord());
byte[] temp = re.nextRecord(); //re.nextRecord(); 返回遍历器中下一位置的记录拷贝(修改不影响记录仓储中的值);
System.out.println(temp);
// words[wordRecords] =temp[wordRecords] ;
wordRecords++;
}
} catch (RecordStoreNotOpenException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(Exception ex){
ex.printStackTrace();
}
return words;
}
//RecordFilter 过滤接口
//过滤接口是用来过滤不满足条件的记录
//RecordComparator 比较器接口
public int compare(byte[] rec1, byte[] rec2) { //RecordComparator 必须实现的方法:
// TODO Auto-generated method stub
return 0;
}
//RecordListener 接口
// 用来接受监听记录仓储中记录添加,更改或删除记录事件的接口
//必须实现的方法:recordAdded();recordChanged();recordDeleted(); --都需要传入两个参数:仓储名,记录id
//注:RecordListener 是在对记录仓储的操作动作完成以后被调用的!
}
分享到:
相关推荐
有完整的设计方案,在S60及以上机子完美运行,初学者可以参考下
如果你已经从头开始学习这一...在本文中,我们将通过MIDP的记录管理系统(RMS)来为ExpensesApp MIDlet组件创建一个记录存储器来解决上述问题。我们将会把ExpensesApp增强到记录库的程度,这将使得该应用程序是有用的。
这是我自己写的一个j2me的小游戏,里面有一个简单的小游戏(马路杀手),然后玩过之后可以选择是否保存,保存之后进入高分榜(存在rms记录管理系统中),
RMS系统 法律/公共安全记录管理系统
在J2ME中,保存持久数据的主要方法之一就是记录管理系统(RMS),从本质上看它就是文件管理系统,但是它又具有数据库管理系统的特征。 记录管理系统通过记录管理器来实现信息存储,记录存储器类似数据库系统中的表,...
RMS 中演示了以下功能,其中包括: 实时、内联、用户输入验证 用于最小化视图复杂性并减少代码重复的基本小部件 通过活动和地点进行页面导航 通过配置和属性文件(i18n 兼容)集中用户界面文本。 GWT 风格的资源...
基于http的SQL Server与RMS间的数据通信,游品芳,杨春金,作为MIDP 的一部分,记录管理系统(RMS)实现了在微小型系统上持久存储的能力。本文分析了RMS存储的基本原理,并通过一个简单的实例�
OpenKM是一个电子文档管理系统和记录管理系统EDRMS(DMS、RMS、CMS)。 它提供了满足当今 IT 需求的现代灵活架构,基于开放技术(Java、Tomcat、GWT、Lucene、Hibernate、Spring 和 jBPM)、强大且可扩展的多平台...
开始吧克隆git # shell scriptgit clone 直接在直接设置数据库环境下创建config.yml文件#config.yml file#local environment (unix)default: dataconnection: driver: "PostgreSQL Driver" database: "postgres" uid...
移动平台开发,数据库RMS编程 记录管理系统(RMS)实际上是一种小型的数据库系统。 与数据库系统中的“表”相对应,要RMS中存放数据是Record Store(记录表)。
原来的MIDP 规范定义了持久的,基于记录的存储功能叫记录管理存储(RMS)。一个MIDlet 套件可 以使用RMS 创建一个或多个记录存储,每个由一个独一无二的名字标识。在 javax.microedition.rms 包中可以找到必要的类和...
6记录管理系统(RMS) 7异常处理 8多线程应用 9移动网络应用 10文件管理 11个人信息管理 12无线消息服务 13Push技术 14XMl应用 15多媒体开发 16游戏开发 17设计模式 18单元测试 19"在线听歌"商务应用实例
Texas 4000 乘客管理系统背景Texas 4000 骑手管理系统试图将骑手的骑车日期整合到一个中央数据库中,并使里程记录和报告功能无缝连接。目的该软件的目的是让 Texas 4000 团队更好地管理其智力资源。 目前,信息在 ...
记录管理 移动数据终端 单位追踪 部门与机队管理 公开公告 刑法 报告撰写与管理 现实统计 要了解有关Response和上面概述的功能的更多信息,请参见以获取更多信息。 贡献 TL; DR。 我们鼓励任何人和所有人为我们的...
记录管理系统是一个使用 SQLITE 的本地化数据存储,并使用 TWAIN 工具包与任何连接的扫描仪集成(可能需要许可证?) RMS 所基于的资源来自书籍归档系统和记录管理(大学系列)第 3 版可用在亚马逊上...
第五章“MIDP的持久化解决方案 — RMS” 为我们讲解了数据持久化机制——记录管理系统(Record Management System RMS)。这一特别的小型数据库使得MIDP的数据保存变得很特别。 第六章“GAME API” 介绍了MIDP 2.0...
第五章“MIDP 的持久化解决方案 — RMS” 为我们讲解了数据持久化机制——记录管理 系统(Record Management System RMS)。这一特别的小型数据库使得MIDP 的数据保存变得很特 别。 第六章“GAME API” 介绍了MIDP 2.0...