手机搜索开发日志(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对象内部所存储的数据。

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

利用rms实现信息的存储和查询

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

2.向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);
            }

3.读存储记录
            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);
            }

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

5.删除记录存储器
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);
                }
            }

明天要解决的问题:怎么利用RMS存储如此庞大的数据信息!

你可能感兴趣的:(Netbeans)