Olá galera…
Meu post de hoje é sobre persistência de dados em Java ME, este simples texto objetiva descrever de forma simples e direta as alternativas para este fim, e ainda, mostrar como gerenciar informações de forma persistente em um dispositivo móvel através do RMS (Record Management System). Não iria discutir sobre os tratamentos especiais que a persistência de dados para ambientes móveis tem em relação ao ambiente desktop, senão teria que escrever um artigo formal e não um simples post.
Para começar a história, é necessário que o leitor saiba a diferença entre as configurações na plataforma Java ME, a CDC e a CLDC, se acaso essa premissa não for verdadeira recomendo que pesquise primeiro sobre isso e posteriormente acabe a leitura deste post. Pois bem, sabendo disto, posso dizer que a configuração define a forma como se manipula a persistência de dados, na CLDC é usado o RMS e na CDC existem mais possibilidades, existindo inclusive alguns Sistemas Gerenciadores de Banco de Dados otimizados para pequenos equipamentos, como é o caso da Oracle, Sybase e Microsoft Access.
Levando em conta a diferença na utilização de CLDC e CDC, este post terá seu foco em RMS, é importante ressaltar, que existem alguns framework para tornar menos árduo a tarefa de gerenciar RMS’s, porém não estão muito difundidos.
RMS
O RMS é um banco de dados orientado a registros, é um pouco diferente dos já tradicionais banco de dados relacionais. Na sua estrutura encontram-se registros chamados de Record Store, que podem ser entendidos como uma tabela em um banco Oracle por exemplo. Olhe a figura ao lado para continuar a explicação.
Cada Record Store contem conjuntos de informações, armazenados em um vetor de bytes e representados por um inteiro, que será sua identificação para qualquer operação, como atualização e remoção do registro.
Cada Record Store é representado por um nome de até 32 caracteres Unicode (16 bits). O limite de armazenamento é o mesmo que o dispositivo oferecer. Por exemplo, um Siemens MC 60 não vai oferecer o mesmo espaço para um Record Store que um Motorola V6. Outro fato importante a ser lembrado, é que quando uma MIDlet é removida do aparelho todos os seus Record Store´s também são apagados.
Codificação
Vamos ao que interessa, aos códigos. A sequência de métodos abaixo mostra os principais métodos da classe javax.microedition.rms.RecordStore, usada para a manipulação das informações.
openRecordStore(String nome, boolean criar): Abre um RecordStore, do nome especificado no primeiro parâmetro, e criando o RecordStore se o mesmo não existir, se o último parâmetro for igual a true.
closeRecordStore(): Fecha um dado RecordStore.
deleteRecordStore(String nome): Deleta um RecordStore com o nome especifica.
addRecord(byte[] data, int inicio, int numeroBytes): Adiciona um registro a um RecordStore, o primeiro dado é o vetor de bytes (pode ser uma string no formato original), o início do vetor que será lido e seu tamanho.
setRecordStore(int id, byte[] data, int inicio, int numeroBytes): Método semelhante ao anterior, exceto por receber o inteiro que identifica um registro e fazer alteração.
deleteRecord(int id): Deleta um registro especificado pelo seu id.
getNumRecords(): Retorna o número de registros de um RecordStore em particular.
Para melhor compreensão disponibilizar uma classe que insere apaga registros em um RecordStore, o código está todo comentado nas partes de persistência de dados, o link é “Exemplo de uso de RMS”, pode ser acessado aqui ou no menu “downloads” na parte direita deste blog.
Porém, alguns pontos são importantes, no método lerNomes é usado o RecordEnumerator, ele serve para enumerar todos os registros de um RecordStore, facilitando a leitura, pois tem método de next, previous, hasNextElements etc, semelhante a classe Enumerator do próprio Java. Além disso, se um RecordStore poderá ter seus elementos deletados, o leitor deverá usar esta classe, pois os id´s que são armazenados no Record Store, geralmente começam em 1 e são incrementados a cada noso registro adicionado. Então de 5 inserções seguidas tem-se os seguintes id´s no RS: 1, 2, 3, 4, 5. Depois de eliminarmos o id 3, o Java ME não preenche aquele id. E a partir deste momento tem-se 1, 2, 4, 5 como os id´s válidos. Usando apenas um laço começando em um até o número de registros o código irá falhar, por que o id de número 3 já não existe mais no RS.
Bem, espero ter mostrado o essencial da utilização de Record Store e da persistência de dados em Java ME, claro que sobre isso eu poderia escrever mais texto, mas como se trata de um post, a idéia é dar uma visão bem geral e sucinta, mas qalquer coisa estou disponível para tirar as dúvidas do pessoal.
Att.
Ping





