手机搜索开发日志(2)

RMS到底类似于内存还是外存?记录存储器更像一个文件,而不是一个数据库管理系统。使用RecordEnumeration接口可以在记录存储器中进行查询和排序。
for (int i = 1; i <= recordstore.getNumRecords(); i++)
recordstore的ID是从1开始,而非0开始。

现在遇到一个问题了,将“你好,涓涓细流”这个字符串转换成字节数组,之后又转换成字符串在S60中文模拟器中显示成“??????”,显然是显示错误,该怎么办?用DataInputStream的readUTF()方法输入可以正常输出汉字!


现在要编写用来保存复杂数据类型的记录的程序,怎么把需要的庞大的数据存储到手机里。

先调用ByteArrayOutputStream()构造函数创建字符数组输出流把数据写到缓冲区中,再调用DataOutputStream()构造函数输出字节数组输出流的数据输出流,此函数调用前者的应用。这个操作的目的是把数据写到缓冲区中,然后把缓冲区中的数据写到六种,然后再把数据流转换成一个字节数组,再把字节数组写到记录存储器中。

DataOutputStream类有吧特殊数据类型写到缓冲区的方法,是不是我上次遇到的不能正确显示中文的问题就可以借助DataOutputStream()得到解决呢?

flush():把缓冲区的数据放置到数据流中。
toByteArray():把数据流转换成字节数组。
reset():清空ByteArrayOutputStream对象内部所存储的数据。

[b]查询记录[/b]
查询用的是过滤器实现的。
在netbeans中输入Filter,竟然报错说“找不到符号 类:Filter”,这是为什么呢?

[b]利用rms实现信息的存储和查询[/b]

[b]1.[/b]记录存储系统是在一个记录存储器中存储信息,所以要存储信息,首先要[b]建立[/b]自己的记录存储器,相当于pc中的数据表。
private RecordStore recordstore = null;//新建一个RecordStore类的实例
recordstore = RecordStore.openRecordStore("我的记录存储器的名字",true);//true表示若我的记录存储器不存在,则新建一个名为“我的记录存储器”的记录存储器。
RecordStore类是RMS中唯一的一个类。

[b]2.[/b]向recordstore记录存储器中写入记录
try{
byte[] outputRecord;//字节数组
String outputString[] = {"娟", "婷", "珊"};//要存进recordstore的字符串数组
int outputInteger[] = {15, 10, 5};//要存进recordstore的整数型数组
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();//字节数组输出流
DataOutputStream outputDataStream = new DataOutputStream(outputStream);//数据输出流
//将数组中的信息写到数据输出流中
for (int i = 0; i <3; i++){
outputDataStream.writeUTF(outputString[i]);//这个就是可以写汉字的函数吧,这里只是读到缓冲区中
outputDataStream.writeInt(outputInteger[i]);//这里只是读到缓冲区中
outputDataStream.flush();//把缓冲区的数据放置到数据流中
outputRecord = outputStream.toByteArray();//把数据流转换成字节数组
recordstore.addRecord(outputRecord, 0, outputRecord.length);//将字节数组写到记录存储器中
outputStream.reset();//清空ByteArrayOutputStream对象内部所存储的数据
}
outputStream.close();//关闭字节数组输出流
outputDataStream.close();//关闭数组输出流
}
catch (Exception error){
alert = new Alert("写错误", error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}

[b]3.[/b]读存储记录
try{
String inputString;//
byte[] byteInputData = new byte[300];
ByteArrayInputStream inputStream = new ByteArrayInputStream(byteInputData);
DataInputStream inputDataStream = new DataInputStream(inputStream);
//以下到002是练习过滤器查询复杂数据记录
if (recordstore.getNumRecords() > 0){
filter = new Filter("珊");
recordEnumeration = recordstore.enumerateRecords(filter, null, false);
while (recordEnumeration.hasNextElement()){
recordstore.getRecord(recordEnumeration.nextRecordId(), byteInputData, 0);
inputString = inputDataStream.readUTF() + " " + inputDataStream.readInt();
alert = new Alert("Reading", inputString, null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
}
inputStream.close();
}
catch (Exception error){
alert = new Alert("Error Reading", error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}

[b]4.关闭记录存储器[/b]
try{
recordstore.closeRecordStore();
}
catch (Exception error){
alert = new Alert("Error Closing", error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}

[b]5.删除记录存储器[/b]
if (RecordStore.listRecordStores() != null){
try{
RecordStore.deleteRecordStore("DalianBus");
}
catch (Exception error){
alert = new Alert("Error Creating", error.toString(), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
}

[b]明天要解决的问题:怎么利用RMS存储如此庞大的数据信息![/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值