Record Store

Como eu faço para armazenar um object em um record store??

Mais precisamente, eu estou precisando armazenar um DateField em um record store…

Tem como eu converter uma string, data, para uma DateField??

rapaz é o seguinte, vamos por partes…primeiro, vc esta usando algum framework para armazenar esses registros, ou vc esta usando o Record Store (RS) direto? e segundo, se vc der uma pesquisada aqui no forum vai achar a solução do seu segundo problema :wink:

Cara, Extjs certo?

o buraco é bem mais embaixo, aconselho que vc comece pelos tutoriais no site do Ext (isso leva tempo, vá com calma).

Woody

não…não…kra é o seguinte, to fazendo meu tcc pra minha POS, e nele precisei unsa RS entao li sobre o floggy, cara muito, muito show…vc só precisa entender realmente oque vc quer, mas o resto é graça esse framework é muito show e facil de usar…:wink:

Olá, o floggy é uma boa opção, apesar de não eu nunca ter testado em aparelhos mesmo, e assim, não saber nada sobre sua compatibilidade e restrições. Se seu objeto não tiver variáveis de instâncias que sejam arrays bidimensionais, então acho que vai funcionar… Caso contrário, uma forma é pensar um jeito de unir todos os atributos do teu Objeto em byte [], e depois criar um construtor pra recuperar o “objeto” a partir desses byte []. Dependendo do que tu quiser inserir pode ser muito trabalhoso, mas já tive uma experiência em que isso demonstrou uma performance temporal bem melhor.

Rapaz, veja se resolve teu problema:;

    void gravaDateField(DateField field) throws RecordStoreException {
        byte[] bytes = String.valueOf(field.getDate().getTime()).getBytes();
        RecordStore rs = RecordStore.openRecordStore("DateField", true);
        //Adiciona o registro SEMPRE no primeiro registro
        if (rs.getNextRecordID() == 1)
            rs.addRecord(bytes, 0, bytes.length);
        else
            rs.setRecord(1, bytes, 0, bytes.length);
        rs.closeRecordStore();
    }
    
    DateField abreDateField() throws RecordStoreException {
        RecordStore rs = RecordStore.openRecordStore("DateField", true);
        Date date = new Date(Long.parseLong(new String(rs.getRecord(1))));
        rs.closeRecordStore();
        DateField field = new DateField("Data", DateField.DATE);
        field.setDate(date);
        return field;
    }

Esse é apenas como exemplo! Vc deve tratar algumas Exceptions, entre outras coisas. Isso aí serve apenas para 1 campo, ou seja, 1 recordstore terá apenas 1 registro. Mas vc pode adaptar para a sua necessidade.

/*
 * Funcionario.java
 *
 * Created on 28 de Agosto de 2008, 20:03
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package rms;

import java.io.*;
import javax.microedition.lcdui.List;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import net.sourceforge.floggy.persistence.FloggyException;
import net.sourceforge.floggy.persistence.ObjectSet;
import net.sourceforge.floggy.persistence.Persistable;
import net.sourceforge.floggy.persistence.PersistableManager;
/**
 *
 * @author Abel Gomes
 */
public class FuncionarioRms implements net.sourceforge.floggy.persistence.Persistable {
    
    private String nome;
    
    private String endereco;
    
    private String telefone;
    
    public FuncionarioRms(){
        
    }
    
    public void salvar(FuncionarioRms func){
        
        PersistableManager pm = PersistableManager.getInstance();
        
        try{
            pm.save(func);
        }catch(FloggyException e){
            
        }
    }
    
    public void excluir(Object obj){
        try {
            PersistableManager.getInstance().delete((Persistable) obj);
        } catch (FloggyException ex) {
            ex.printStackTrace();
        }
    }
    
    public ObjectSet buscar(String nome){
        FuncionarioRms func  = new FuncionarioRms();
        
        ObjectSet os = null;
        
        try{
            os  = PersistableManager.getInstance().find(FuncionarioRms.class,new FiltroNomeFuncionario(nome),null);
        }catch(FloggyException e){
            
        }
        
        return os;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }
}

Essa é a minha classe Funcionario…

E essa outra é a classe filtro…para vc fazer pesquisa com base naquilo que vc quiser…

/*
 * FiltroNomeFuncionario.java
 *
 * Created on 30 de Agosto de 2008, 09:41
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package rms;

import net.sourceforge.floggy.persistence.Persistable;

/**
 *
 * @author Abel Gomes
 */
public class FiltroNomeFuncionario implements net.sourceforge.floggy.persistence.Filter {
    
    private String nome;
    /** Creates a new instance of FiltroNomeFuncionario */
    public FiltroNomeFuncionario(String nome) {
        this.nome = nome;
    }

    public boolean matches(Persistable persistable) {
        
        FuncionarioRms func = (FuncionarioRms) persistable;
        
        return func.getNome().startsWith(nome);
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
    
}

agora vc V ai qual a maneira mais simples de salvar…

assim:

# void gravaDateField(DateField field) throws RecordStoreException {  
#     byte[] bytes = String.valueOf(field.getDate().getTime()).getBytes();  
#     RecordStore rs = RecordStore.openRecordStore("DateField", true);  
#     //Adiciona o registro SEMPRE no primeiro registro  
#     if (rs.getNextRecordID() == 1)  
#         rs.addRecord(bytes, 0, bytes.length);  
#     else  
#         rs.setRecord(1, bytes, 0, bytes.length);  
#     rs.closeRecordStore();  
# }  
#   
# DateField abreDateField() throws RecordStoreException {  
#     RecordStore rs = RecordStore.openRecordStore("DateField", true);  
#     Date date = new Date(Long.parseLong(new String(rs.getRecord(1))));  
#     rs.closeRecordStore();  
#     DateField field = new DateField("Data", DateField.DATE);  
#     field.setDate(date);  
#     return field;  
# } 

ou assim

public void salvar(FuncionarioRms func){
        
        PersistableManager pm = PersistableManager.getInstance();
        
        try{
            pm.save(func);
        }catch(FloggyException e){
            
        }
    }

Não to querendo desbancar ninguem nem nada…só estou apontando uma maneira de vc as coisas sem precisar reinventar a roda…é muito importante vc saber como funciona sem o floggy…mas com ele as coisas se tornam bem mais facil…