RMS 记录管理系统

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 是在对记录仓储的操作动作完成以后被调用的!









}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
--== 微机室上机记录管理系统 V1.3 ==-- 程序更新(2014年5月26日) 1、修正管理员编辑记录时任课教师无法修改的问题; 2、调整管理员后台记录显示为多重条件显示,按照上机时间降序,节次降序,机号升序显示,这样按照机号顺序可以及时查看哪台机器未提交记录。 --== 微机室上机记录管理系统 V1.2 ==-- 程序更新(2010年5月25日) 修正管理员编辑记录时节次无法修改的问题。 --== 微机室上机记录管理系统 V1.1 ==-- 程序更新(2009年12月14日) 修正管理员编辑记录时班级显示错误与提交错误的问题。 --== 微机室上机记录管理系统 V1.0 ==-- 1、本程序为ASP系统,需配置本机支持IIS,将本程序复制到WEB目录并修改数据库路径。 2、设计思路: 学校机房学生填写上机记录,因为缺乏有效管理记录经常缺失或者个别学生胡乱填写,故参照相关程序设计该程序。程序需开机自启动,启动后为全屏无菜单栏、工具栏等相关按钮,学生必须填写提交后方可关闭窗口继续操作,因此添加了一个“启动 Internet Explorer 浏览器”的快捷方式,并设置启动参数为开机全屏,将其添加到启动菜单即可实现该功能。 3、同时鉴于学生填写时出现错误问题的情况,添加了教师后台,教师后台可以编辑或删除不符合要求的记录。教师可通过数据库添加或修改管理员用户名和密码。 4、使用说明: 学生填写部分:本软件采用Macromedia Dreamweaver MX 2004+access编写而成,首页是要求学生填写的内容,其中姓名一是必须填写的,其他为可选项,学生提交后,会提示成功信息,并列出最近填写的前10名名单(主要为了增加学生填写兴趣)。填写成功学生就可以点击关闭链接关闭浏览器继续操作。 5、数据库部分: 本程序数据库为access.mdb,且已备份一个原始空数据库,数据库路径可用记事本程序打开Connections目录下shuju.asp文件,修改“H:\flash_homes\0-JILU\ACCESS.MDB”为本机路径即可。 6、程序使用方法: 程序根目录下有一个“启动 Internet Explorer 浏览器”的快捷方式,该快捷方式可设置为客户机自启动,IE启动后为全屏并打开上机记录系统程序,填写完毕后才出现关闭链接,避免学生不填写记录进入操作。修改该快捷方式属性为本机地址即可。 7、教师管理部分: 在Index.asp首页页面上单击“教师管理”链接,进入教师管理登录页面,输入用户名:admin,密码: admin,进入管理页面,会自动列出最近40个填写的名单,教师可以根据需要修改或者删除不合格的填写记录。教师也可以根据机号查询一台计算机上机记录填写情况,根据需要打印。 8、服务器端获取客户机计算机名的运行命令行: cscript C:\Inetpub\AdminScripts\adsutil.vbs set/w3svc/EnableReverseDNS "TRUE" 在服务器端选择“程序\运行”,运行上述命令即可。 制作:淄博市博山八中 王训波 网址:http://www.5uol.cn QQ:20702537

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值