【IT168 技术文档】
1.内容介绍
介绍RMS的实战开发。
介绍笔者开源的小型数据库引擎
RMS-记录管理系统,J2ME的一个小型,简单的存储解决方案。
2.预期读者&建议
J2ME程序员。
3.实战讲解
基本操作
RMS 提供常用的方法:打开存储表,J2ME提供了统计的静态方法处理打开表的操作。
public static RecordStore openRecordStore(String recordStoreName,
boolean createIfNecessary,
int authmode,
boolean writable)
throws RecordStoreException, RecordStoreFullException,
RecordStoreNotFoundException
recordStoreName -- 需要打开的表名
createIfNecessary -- 如果存在就打开,如果不存在就创建,假如ture的情况,fasle则只打开存在的表
Authmode -- 访问的方法权限
Writable -- 是否允许外部MIDlet套件访问,如果表存在,此参数是可忽略的。
删除存储表:
public static void deleteRecordStore(String recordStoreName)
throws RecordStoreException, RecordStoreNotFoundException
删除表格,recordStoreName-为指定的表格名称,如果表格正在打开,或者不存在都会抛出异常。
RMS,最常用的操作是添加,编辑,删除,更新记录。
添加,RMS只支持添加二进制的数据,一般采用DataOutputStream的方式进行序列化。
public int addRecord(byte[] data, int offset, int numBytes)
throws RecordStoreNotOpenException, RecordStoreException,
RecordStoreFullException
data -- 保存数据
offset -- 起始索引
numBytes -- 长度
删除
public void deleteRecord(int recordId)
throws RecordStoreNotOpenException, InvalidRecordIDException,
RecordStoreException
recordId -- 记录的索引,一般采用遍历的方式获取索引,或者通过addRecord也可以返回对于的索引。
编辑,更新
public void setRecord(int recordId, byte[] newData,
int offset, int numBytes)
更新指定索引的记录。
一般的添加记录的方式:
- 构建一个DataOutputStream流进行写操作,然转换成byte[] 写入RMS中。
- 示例
ByteArrayOutputStream sBout = new ByteArrayOutputStream();
DataOutputStream sDout = new DataOutputStream(sBout);
sDout.wirteInt();
sDout.writeUTF();
....................
sBout.toByte() .
Svae(byte);
RMS操作就是如此简单。
注意问题
注意对rms容量的控制。
不建议直接删除表,应该逐条删除记录,然后再删除表。
实战Demo
笔者采用RMS写的简单数据库引擎。
次引擎支持:
1,添加,删除,编辑,遍历,查询记录。
采用的是类SQL方式。比如你可以crate table,delete table,insert, select等方式操作记录。
具体内部实现方式这里就不一一阐述了,有兴趣的读者可以自行研究代码。
下载地址: http://wuhua.javaeye.com/blog/54528
4.电话本案例
本案例只是介绍笔者RMS引擎的用法,有相当部分的功能未能在这里阐述,有兴趣的读者可以自行自行研究代码。
程序功能
1.添加联系人包括联系资料是: 姓名, 手机, email, 地址.
2.修改联系人资料.
3.查询联系人资料,
4.删除联系人.
项目设计
1.采用本人写的简单的rms数据引擎. 也算是一个比较丰富的例子供大家学习交流
2.采用高级UI展示.
3.整体架构采用Web常用的方式MVC结构,充分展示j2me设计也可以很灵活.并且在性能方面的问题不大
这里介绍几个系统核心接口:
ResultSet --- 对数据操作的结构集, 比如查询的时候将返回一个可用的结构.里面的用法跟JDBC差不多.
Query --- 对本人自定义的sql进行执行,执行返回ResultSet结构
DataBaseServer --- 对RMS引擎的启动,关闭.资源处理,摆脱直接操作RMS各个异常的困扰
QueryBuilder --- 静态工厂类,通过sql创建一个Query实例.
关于自定义SQL语法设计
比如创建表格语法是
create :friend: f_name :f_mobile :f_email :f_address
插入数据是:
Query q = QueryBuilder.builder("insert :friend :f_name :f_mobile :f_email: f_address ");
q.setString("f_name",friend.getName() );
q.setString("f_mobile", friend.getPhone());
q.setString("f_email", friend.getEmail());
q.setString("f_address", friend.getAddress());
q.execute();
1. 添加表格
create table_name column_1 column_2 column_3 ......
drop table_name
2. 操作数据
insert table_name column_1 ..... 对于这个操作,然后具体在api调用setString(index, value)
update table_name set ..... where column_1 = key;
select table_name f_id=1;
源代码下载:http://rongqing.rao.googlepages.com/PhotoBook.rar
关于作者
饶荣庆
从事J2ME,Android开发工作多年,现在就职于UCWEB。从事浏览器相关的开发工作。