Você está na página 1de 27

RMS: Record Management System

Prof.º Adriano Barreto


RMS: Record Management System

• O Java ME disponibiliza um mecanismo


para que as MIDlets possam guardar dados
e lê-los mais adiante. É a chamada Record
Management System (RMS).

• É o mecanismo padrão para persistência


oferecido pelo MIDP.

MIDP - MOBILE INFORMATION DEVICE PROFILE é um conjunto de APIs,


que oferece recursos como rede, componentes de interface,
armazenamento local, etc.
RMS: Record Management System

• Compartilhamento de Registros

CONJUNTO 1 CONJUNTO 2
RMS: Record Management System
Record Stores:

• É uma coleção de registros que permanece


o mesmo durante múltiplas chamadas do
MIDlet.

• A plataforma é responsável por manter a


integridade desses registros, mesmo após
reboots ou trocas de baterias.

• Cada record store pode ser visualizado


como uma coleção de registros
RMS: Record Management System
Records

• São vetores de bytes. Utilizados para


armazenagem de diferentes tipos de dados.

• Cada Registro tem associado a ele um


identificador chamado recordID;

• O recordID pode ser usado para recuperar


um registro dentro de uma Record Store;
RMS: Record Management System

Records
RMS: Record Management System
Streams
• As operações de I/O são realizadas através de classes que as
implementam e estão localizadas no pacote java.io. Java ME
possui apenas algumas funções das classes disponíveis em
Java SE.
• InputStream, OutputStream: São classes básicas para fluxos
binários;
• ByteArrayInputStream, ByteArrayOutputStream: fluxos para
bufferizar arrays na memória;
• DataInputStream, DataOutputStream: ler e escrever tipos
Java primitivos (int, float, String, ...) em streams;
RMS: Record Management System
Cada recordStore é identificado por um nome que
deve ser único, sua criação é feita de forma
simples e bem sugestiva, da seguinte forma:

RecordStore.openRecordStore
( “NomeQualquer” , true);

O método para fechar o recordStore é nada mais


que:

ObjetoRecordStore.closeRecordStore();
RMS: Record Management System
• O parâmetro boolean da chamada do método indica
que se true o RecordStore será aberta e se não
existir será criada.

• O false apenas abre uma RecordStore existente.

• Lembre-se também que sempre que for manusear


um RecordStore você precisa usar try{} catch{},
pois estas operações geram exceções como:

• RecordStoreException;
• RecordStoreFullException;
• RecordStoreNotFoundException.
RMS: Record Management System
Devemos lembrar que um banco de dados em
dispositivos móveis tem suas funcionalidades
bem reduzidas, não possui um estrutura de
linhas e colunas, Se quisermos guardar mais
que uma informação no array de Bytes, temos
que trabalhar com este array, colocando algum
caractere de controle para seu
armazenamento.

(Ex: Nome | Idade)


RMS: Record Management System
Criando um RecordStore

• AUTHMODE_ANY
• AUTHMODE_PRIVATE
RMS: Record Management System

• É possível adicionar registros ao record store


utilizando o método addRecord, o valor
retornado pelo método addRecord é um
identificador único para o registro adicionado.

• Os identificadores de registros começam em 1


e são incrementados a cada registro
adicionado. Para obter o número identificador
do próximo registro a ser adicionado utilize o
método getNextRecordID.
RMS: Record Management System
• Métodos para a manipulação dos registros:

• Adiciona um registro a partir de um array de


bytes.

int addRecord(byte[] dados, deslocamento,quantidade).

• Substitui um determinado registro identificado


pelo recordId.

setRecord(recordId, byte[] dados , deslocamento,quantidade).


RMS: Record Management System
...
RecordStore rs = null;
String nome = “Carlos”;
...
try {
rs = RecordStore.openRecordStore( “meusdados", true );
byte[] recData = nome.getBytes();
rs.addRecord(recData, 0, rec.length); //Grava dados
...
//Recupera dados
String retorno = new String( rs.getRecord(1) );

} catch( Exception e ) {
// tratamento de excessão
}
RMS: Record Management System
RMS: Record Management System
• Cada registro pode ser lido ou modificado,
segundo seu ID, como já visto, o ID é retornado a
cada inserção.

public byte[] getRecord(int recordID)

• O comando retorna um array de bytes para


podermos trabalhar com ele.

• Para deletar records, usamos o método:

public void deleteRecord(int ID)


RMS: Record Management System
RecordEnumeration

• Diponibilizado pela classe RecordStore o


método enumerateRecords() realiza uma
leitura integral no record store.

• Os registros são colocados em uma área de


memória.

• Os registros são recuperados da memória


através de métodos definidos na interface
RecordEnumeration.
RecordEnumeration
• Métodos Principais

– RecordEnumerator
enumerateRecords(RecordFilter filter,
RecordComparator comparator,
boolean keepUpdated); *
– byte nextRecord();
– byte previousRecord();
– Boolean hasNextElement();
– Boolean hasPreviousElement();
– Void keepUpdated(boolean keep);

* Método da classe RecordStore


RecordEnumeration
...
RecordEnumeration enum =
re.enumerateRecords(null, null, false);

while ( re.hasNextElement() ) {
//armazena o próximo registro em um String
String str = new String(re.nextRecord());
… processa algo…
}

RecordComparator

• Interface para comparação entre registros

• Método a ser implementado


– Int compare(byte[] rec1, byte[] rec2);

• Tipos de RecordComparator

– EQUIVALENT – rec1 é equivalente a rec2


– FOLLOWS – rec1 vem depois de rec2
– PRECEDES – rec1 vem antes de rec2
RecordComparator

public class Comparador implements RecordComparator {


public int compare(byte rec1, byte rec2) {
String str1 = new String(rec1);
String str2 = new String(rec2);

int resultado = str1.compareTo(str2);


if (resultado == 0)
return RecordComparator.EQUIVALENT;
else if (result < 0)
return RecordComparator.PRECEDES;
else
return RecordComparator.FOLLOWS;
}
}
RecordComparator
...
//Cria um novo comparador para ordenar
Comparador comp = new Comparador();

//Referencia o comparador ao criar a enumeração


RecordEnumeration re = rs.enumerateRecords(null, comp,
false);

//Faz a iteração nos registros, que já estarão ordenados


While ( re.hasPreviousElement ) {
...
String s = new String(re.previousRecord());
...
}

Conclusão
• O armazenamento dos dados é
fundamental para qualquer aplicação, em
dispositivos móveis não é diferente, sendo
que existem várias maneiras de armazenar
esses dados. Entre elas está o RMS
disponibilizado pelo MIDP que permite
armazenar os dados em record store que
armazenam os dados em array de bytes.

• Os registros podem ser compartilhados


entre os MIDlets de um mesmo MIDlet
Suite e são identificados pelo nome.
Conclusão
• A aplicação deve utilizar mecanismos de conversão dos
tipos de dados específicos para array de bytes e vice-
versa ao escrever e ler os dados respectivamente;

• O record store pode ser acessado pelo seu ID ou através


de enumeration que é a melhor opção para recuperar
registros;

• Utilizando enumeração você recupera todos os registros


de um record store e registros que satisfaçam critérios
que você especificar;

• Outra facilidade disponibilizada pela enumeração é


recuperar dados de uma forma ordenada.
Obrigado pela atenção

Você também pode gostar