RecordStore

Descrição

RecordStore nada mais é que uma classe que armazena dados num arquivos RMS que é um formato criptografado do celular - como se fosse um "banco de dados". Nem pense em copiar o arquivo RMS para o PC para lê-lo em um programa desktop porque não é possível.

Este exemplo abaixo é um exemplo real que estava em funcionamento.

Bean Despesa.java

Será usado no exemplo

import java.util.*;

 

public class Despesa {

    

    private int id;

    private String valor;

    private Date data;

    private String descricao;

    private int tipo;

    private boolean cartao, pagar;

    private int cheque;

    

    public Despesa() {

        this.id = 0;

        this.valor = "0,00";

        this.data = new Date();

        this.descricao = "";

        this.tipo = 0;

        this.cartao = false;

        this.pagar = false;

        this.cheque = 0;

    }

    

    // --------- setter

    

    public void setId(int aid) {

        this.id = aid;

    }

    

    public void setValor(String avalor) {       

        this.valor = avalor;

    }

    

    public void setData(Date adata) {

        this.data = adata;

    }

    

    public void setDescricao(String adescricao) {

        this.descricao = adescricao;

    }

    

    public void setTipo(int atipo) {

        this.tipo = atipo;

    }

    

    public void setCartao(boolean acartao) {

        this.cartao = acartao;

    }

    

    public void setPagar(boolean apagar) {

        this.pagar = apagar;

    }

    

    public void setCheque(int acheque) {

        this.cheque = acheque;

    }

    

    // ----------- getter

    

    public int getId() {

        return this.id;

    }

    

    public String getValor() {

        

        if (this.valor.equals(""))

            this.valor = "0,00";

        

        return this.valor;

    }

    

    public Date getData() {

        return this.data;

    }

    

    public String getDescricao() {

        return this.descricao;

    }

    

    public int getTipo() {

        return this.tipo;

    }

    

    public boolean getCartao() {

        return this.cartao;

    }

    

    public boolean getPagar() {

        return this.pagar;

    }

    

    public int getCheque() {

        return this.cheque;

    }

 

    public String toString() {

      

      Calendar c = Calendar.getInstance();

      c.setTime(getData());

      String s = c.get(Calendar.DATE) + "/" + (c.get(Calendar.MONTH) + 1) + "/" + c.get(Calendar.YEAR);

        

      return getValor() + "^" + s + "^" +

             getDescricao() + "^" + Geral.CODIGOS[getTipo()] + "^" + (getCartao() ? "S" : "N") + "^" +

             (getPagar() ? "S" : "N") + "^" + getCheque() + "\r\n";

    }

    

}

 

OrdemDescricao.java

 

Objeto usado no método getDespesas() da persistência para trazer as despesas em ordem alfabética

import java.io.ByteArrayInputStream;

import java.io.DataInputStream;

import javax.microedition.rms.RecordComparator;

 

public class OrdemDescricao implements RecordComparator {

    

    public int compare(byte[] par1, byte[] par2) {

        

        String str1 = new String();

        String str2 = new String();

        ByteArrayInputStream bFluxo;

        DataInputStream dFluxo;

        

        try {

            

            bFluxo = new ByteArrayInputStream(par1);

            dFluxo = new DataInputStream(bFluxo);

            str1 = dFluxo.readUTF();

            

            bFluxo = new ByteArrayInputStream(par2);

            dFluxo = new DataInputStream(bFluxo);

            str2 = dFluxo.readUTF();

            

        } catch (Exception e) {

            System.err.println("Erro: " + e.toString());

        }

        int result = str1.compareTo(str2);

        if (result == 0)

            return RecordComparator.EQUIVALENT;

        else

            if (result < 0)

                return RecordComparator.PRECEDES;

            else

                return RecordComparator.FOLLOWS;

    }

    

}

 

Persistencia.java

A persistência transforma objetos do tipo Despesa em registros de um RecordStore e vice versa

import java.util.*;

import java.io.*;

import javax.microedition.rms.*;

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

 

public class Persistencia {

    

    private RecordStore rr;

    private byte[] registro;

    

    public Persistencia() {

        

        // ja abre o RecordStore na criação

        try {

            rr = RecordStore.openRecordStore("honey"true);

        } catch (Exception e) {

            System.err.println(e.toString());

        }

        

    }

    

    // adiciona uma despesa na base

    public boolean add(Despesa despesa) {

        

        try {

            // cria o fluxo de saída

            ByteArrayOutputStream bFluxo = new ByteArrayOutputStream();

            DataOutputStream dFluxo = new DataOutputStream(bFluxo);

            

            // grava os campos

            dFluxo.writeUTF(despesa.getDescricao());

            dFluxo.writeUTF(despesa.getValor());

            dFluxo.writeInt(despesa.getTipo());

            dFluxo.writeLong(despesa.getData().getTime());

            dFluxo.writeBoolean(despesa.getCartao());

            dFluxo.writeBoolean(despesa.getPagar());

            dFluxo.writeInt(despesa.getCheque());

            

            // grava

            dFluxo.flush();

            registro = bFluxo.toByteArray();

            rr.addRecord(registro, 0, registro.length);

            bFluxo.reset();

            

            // fecha

            bFluxo.close();

            dFluxo.close();

            return true;

            

        } catch (Exception e) {

            System.err.println(e.toString());

            return false;

        }

    }

    

    // carrega uma despesa pelo Id

    public Despesa get(int id) {

        

        try {

            

            int recordSize = rr.getRecordSize(id);

            byte[] reg = new byte[recordSize];

            

            ByteArrayInputStream bFluxo = new ByteArrayInputStream(reg);

            DataInputStream dFluxo = new DataInputStream(bFluxo);

    

            rr.getRecord(id, reg, 0);

 

            Despesa desp = new Despesa();

            

            desp.setId(id);

            desp.setDescricao(dFluxo.readUTF());

            desp.setValor(dFluxo.readUTF());

            desp.setTipo(dFluxo.readInt());

            

            Date d = new Date();

            d.setTime(dFluxo.readLong());

            desp.setData(d);

            

            desp.setCartao(dFluxo.readBoolean());

            desp.setPagar(dFluxo.readBoolean());

            desp.setCheque(dFluxo.readInt());

            

            // grava

            bFluxo.reset();

            

            // fecha

            bFluxo.close();

            dFluxo.close();

            

            return desp;

            

        } catch (Exception e) {

            

            System.err.println(e.toString());

            return new Despesa();

            

        }

    }

    

    // atualiza os dados da despesa

    public boolean update(Despesa despesa) {

        try {

            // fluxos

            ByteArrayOutputStream bFluxo = new ByteArrayOutputStream();

            DataOutputStream dFluxo = new DataOutputStream(bFluxo);

            

            // grava os campos

            dFluxo.writeUTF(despesa.getDescricao());

            dFluxo.writeUTF(despesa.getValor());

            dFluxo.writeInt(despesa.getTipo());

            dFluxo.writeLong(despesa.getData().getTime());

            dFluxo.writeBoolean(despesa.getCartao());

            dFluxo.writeBoolean(despesa.getPagar());

            dFluxo.writeInt(despesa.getCheque());

            

            // grava

            dFluxo.flush();

            registro = bFluxo.toByteArray();

            rr.setRecord(despesa.getId(), registro, 0, registro.length);

            bFluxo.reset();

            

            // fecha

            bFluxo.close();

            dFluxo.close();

            return true;

            

        } catch (RecordStoreNotOpenException e) {

            System.err.println(e.toString());

            return false;

        } catch (RecordStoreException e) {

            System.err.println(e.toString());

            return false;

        } catch (IOException e) {

            System.err.println(e.toString());

            return false;

        }

    }

    

    // obtem uma matriz das despesas cadastradas

    public Despesa[] getDespesas() {

        

        Despesa[] despesas = null;

        try {

            despesas = new Despesa[rr.getNumRecords()];

            

            OrdemDescricao ordem = new OrdemDescricao();

            RecordEnumeration re = rr.enumerateRecords(null, ordem, false);

            int i = 0;

 

            // enquanto tem elementos...

            while (re.hasNextElement()) {

                despesas[i] = get(re.nextRecordId());

                i++;

            }

            

        } catch (RecordStoreNotOpenException e) {

            e.printStackTrace();

        } catch (InvalidRecordIDException e) {

            System.err.println(e.toString());

        }

            

       return despesas;

    }

    

    // exclui uma despesa

    public void delete(Despesa despesa) {

        try {

            rr.deleteRecord(despesa.getId());

        } catch (RecordStoreNotOpenException ex) {

            ex.printStackTrace();

        } catch (InvalidRecordIDException ex) {

            ex.printStackTrace();

        } catch (RecordStoreException ex) {

            ex.printStackTrace();

        }

    }

    

    // zerar a base

    public void deleteAll() {

        try {

            rr.closeRecordStore();

            rr.deleteRecordStore("honey");

            rr = RecordStore.openRecordStore("honey"true);

        } catch (Exception e) {

            System.err.println(e.toString());

        }

    }

 

    // fechar o recordstore

    public void fechar() {

        try {

            rr.closeRecordStore();

        } catch (Exception e) {

            System.err.println(e.toString());

        }

    }   

}

 

Como usar

// quando inicializar o programa

public Persistencia persistencia = new Persistencia();

 


// consultar despesas

private Despesa[] despesas;

despesas = persistencia.getDespesas();

 

// percorre os itens que vieram da persistencia

for (int i = 0; i < despesas.length; i++)

   despesas[i].getValor() ... despesas[i].getDescricao() ... etc

 


// apagar uma desesa:

persistencia.delete(despesa); // o que importa é o ID

 


// apagar todas as despesas

persistencia.deleteAll(); 

 


// inserir ou editar uma despesa

// se o id é zero é inclusão

if (despesa.getId() == 0)

   Honey.persistencia.add(despesa);

else

   Honey.persistencia.update(despesa);
 


// quando finalizar o programa...  

persistencia.fechar();

 

Veja também

 
Serializando J2ME:
 http://www.devmedia.com.br/articles/viewcomp.asp?comp=83

J2ME e a API Record Management System (RMS):
 http://www.javafree.org/javabb/viewtopic.jbb?t=5853

Persistência com MIDP:
 http://www.guj.com.br/posts/list/2788.java