Ver mensagens sem resposta | Ver tópicos ativos Hoje é 20 Jun 2013, 04:10



Responder Tópico  [ 4 Mensagens ] 
 Android + ORMLite (Banco de Dados Orientado a Objeto) 
Autor Mensagem
What is AVD?
What is AVD?

Data de registro: 15 Jun 2011, 16:56
Mensagens: 10
Mensagem Android + ORMLite (Banco de Dados Orientado a Objeto)
Pra quem quer mesmo se livra do SQL segue uma dica, o ORMLite tem suporte completo a android, até com uma parte dele propriamente dedicado a isso, com classes como por exemplo o ORMSqliteOpenHelper que facilita e muito o trabalho com o banco de dados. Também possui a TableUtils, que torna a criação e a atualização do banco infinitamente mais fáceis.

Neste post eu vou colar um pouco mais de código, mas é tudo bem facil de entender e tudo muito bem comentado, mas mesmo assim, qualquer dúvida não deixem de perguntar, estarei respondendo o mais brevemente possível.

Modelo do Objeto:

package com.ibssistemas.ibs.models;

import java.util.Date;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName="Pessoa")
public class Pessoa {
    @DatabaseField(id=true)
    private int CD_PESSOA;
    @DatabaseField()
    private Short TP_PESSOA;
    @DatabaseField()
    private String NM_PESSOA;
    @DatabaseField()
    private String NM_FANTASIA;
    @DatabaseField()
    private String DS_ENDERECO;
    @DatabaseField()
    private String NR_ENDERECO;
    @DatabaseField()
    private String DS_BAIRRO;
    @DatabaseField()
    private String CD_ESTADO;
    @DatabaseField()
    private int CD_CIDADE;
    @DatabaseField()
    private String CD_CEP;
    @DatabaseField()
    private String DS_EMAIL;
    @DatabaseField()
    private String NR_TELEFONE;
    @DatabaseField()
    private String NR_FAX;
    @DatabaseField()
    private String CD_CGCCPF;
    @DatabaseField()
    private Date DT_NASCIMENTO;
    @DatabaseField()
    private String NM_COMPRADOR;
    @DatabaseField()
    private String BL_OBS;
    @DatabaseField()
    private int CD_TB_PRECO_ATIV;
    @DatabaseField()
    private int FG_ENVIASERVIDOR;
   
    public Pessoa() {}

    public Pessoa(int cDPESSOA, Short tPPESSOA, String nMPESSOA,
            String nMFANTASIA, String dSENDERECO, String nRENDERECO,
            String dSBAIRRO, String cDESTADO, int cDCIDADE, String cDCEP,
            String dSEMAIL, String nRTELEFONE, String nRFAX, String cDCGCCPF,
            Date dTNASCIMENTO, String nMCOMPRADOR, String bLOBS,
            int cDTBPRECOATIV, int fGENVIASERVIDOR) {
        super();
        CD_PESSOA = cDPESSOA;
        TP_PESSOA = tPPESSOA;
        NM_PESSOA = nMPESSOA;
        NM_FANTASIA = nMFANTASIA;
        DS_ENDERECO = dSENDERECO;
        NR_ENDERECO = nRENDERECO;
        DS_BAIRRO = dSBAIRRO;
        CD_ESTADO = cDESTADO;
        CD_CIDADE = cDCIDADE;
        CD_CEP = cDCEP;
        DS_EMAIL = dSEMAIL;
        NR_TELEFONE = nRTELEFONE;
        NR_FAX = nRFAX;
        CD_CGCCPF = cDCGCCPF;
        DT_NASCIMENTO = dTNASCIMENTO;
        NM_COMPRADOR = nMCOMPRADOR;
        BL_OBS = bLOBS;
        CD_TB_PRECO_ATIV = cDTBPRECOATIV;
        FG_ENVIASERVIDOR = fGENVIASERVIDOR;
    }

    //Tirei os getters e setters pro tópico não fica enormemente gigantesco, mas todo mundo vou deixar um só de exemplo:

    public int getCD_PESSOA() {
        return CD_PESSOA;
    }

    public void setCD_PESSOA(int cDPESSOA) {
        CD_PESSOA = cDPESSOA;
    }
}


Esse é o modelo de como a tabela vai ser criada e administrada, entre queries, updates e creates.
Agora, o dbHelper com o getDAO desse objeto:

package com.ibssistemas.ibs.system;

import java.sql.SQLException;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.ibssistemas.ibs.models.CondPagtos;
import com.ibssistemas.ibs.models.Estoque;
import com.ibssistemas.ibs.models.Grupo;
import com.ibssistemas.ibs.models.ItemPedido;
import com.ibssistemas.ibs.models.Pedido;
import com.ibssistemas.ibs.models.Pessoa;
import com.ibssistemas.ibs.models.Produto;
import com.ibssistemas.ibs.models.TabelaPreco;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;

public class dbHelper extends OrmLiteSqliteOpenHelper {
    private static String DB_NAME = "IBS.db4";
    private static int DB_VERSION = 1;
   
    //----------!DAOS!-----------
    private Dao<Pessoa, Integer> PessoaDao = null;
   
    public dbHelper(Context ctx) {
        super(ctx, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase DB, ConnectionSource Conn) {
        try {
        TableUtils.createTable(Conn, Pessoa.class);
        } catch (Exception e) {
            myLog.doLog(new String[] {"Erro ao criar tabelas:"}, e.getMessage());
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase DB, ConnectionSource Conn, int Old,
            int New) {
        if (New > Old) {
            try {
            TableUtils.dropTable(Conn, Pessoa.class, false);
            this.onCreate(DB, Conn);
            } catch (Exception e) {
                myLog.doLog(new String[]{"Erro ao atualizar tabelas para nova versão!"}, e.getMessage());
            }
        }
    }

    public Dao<Pessoa, Integer> getPessoaDao() throws SQLException {
        if (PessoaDao == null) {
            PessoaDao = getDao(Pessoa.class);
        }
        return PessoaDao;
    }


E finalmente o uso aplicável disso tudo ali em cima, não vou colar a classe inteira por que tem JSON misturado e pode ficar um pouco confuso, rs, vou colar só a parte que interessa.
Entendam que cliente é um objeto que se refere a pessoa.

Dao<Pessoa, Integer> daO = DB.getPessoaDao();
Pessoa n = new Pessoa();
                n = daO.queryForId(Integer.valueOf(cliente.getString("cdCliente")));
                int tipoSync = 1; //0 = Insert || 1 = Update
                //Se o nome da pessoa for nulo ou tiver tamanho igual a 0, define tipoSync=0
                if(n.getNM_PESSOA().length() == 0 || n.getNM_PESSOA() == null)
                    tipoSync = 0;      
                //Insere/Altera os dados do objeto Pessoa
                n.setCD_PESSOA(Integer.valueOf(cliente.getInt("cdCliente")));
                n.setNM_PESSOA(cliente.getString("nmRazao"));
                n.setDS_EMAIL(cliente.getString("dsEmail"));
                n.setNM_FANTASIA(cliente.getString("nmCliente"));
                n.setNM_COMPRADOR(cliente.getString("nmComprador"));
                n.setCD_CGCCPF(cliente.getString("cdCPFCNPJ"));
                n.setDS_ENDERECO(cliente.getString("dsEndereco"));
                n.setNR_ENDERECO(cliente.getString("nrEndereco"));
                n.setDS_BAIRRO(cliente.getString("dsBairro"));
                n.setCD_ESTADO(cliente.getString("cdUF"));
                n.setCD_CIDADE(Integer.valueOf(cliente.getInt("cdCidade")));
                n.setCD_CEP(cliente.getString("dsCEP"));
                n.setNR_TELEFONE(cliente.getString("nrTelefone"));
                n.setNR_FAX(cliente.getString("nrFax"));
                n.setCD_TB_PRECO_ATIV(Integer.valueOf(cliente.getInt("cdTabela")));
                n.setBL_OBS(cliente.getString("blObs"));
                n.setDT_NASCIMENTO(Date.valueOf(cliente.getString("dtNascimento")));
                n.setFG_ENVIASERVIDOR(0);
                //Faz Inserção ou Update, dependendo do tipoSync
                if (tipoSync == 0)
                    daO.create(n);
                else
                    daO.update(n);


Bom, é isso ai, sei que meu código não é um dos mais concisos que vocês veêm por ai, mas eu programo do melhor jeito que sei, estou mexendo com Android a 1 mês mais ou menos, e não tinha conhecimento de Java antes disso, de vez em quando me vejo buscando documentação das classes básicas. Reforçando, qualquer dúvida, perguntem :P respondo na medida do possível.

Sobre performance: Estou usando o ORM com um banco de dados relativamente grande para um aplicativo móvel, cada aplicativo deve ter pelo menos 500 clientes e mais de 2000 produtos sincronizados e gravados na base, não vou dizer que a performance é 100% mas isso se deve também a eu estar usando JSON. Então, façam testes de performance ai e me digam como está para vocês.

Aquele abraço.


17 Ago 2011, 11:56
Perfil
What is DDMS?
What is DDMS?

Data de registro: 25 Jun 2010, 23:39
Mensagens: 32
Mensagem Re: Android + ORMLite (Banco de Dados Orientado a Objeto)
No meu projeto ta dando NoClassDefFound quando tento instanciar "dbHelper extends OrmLiteSqliteOpenHelper"
Ja teve esse erro?


public class DatabaseHelper2 extends OrmLiteSqliteOpenHelper{
   
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "BANCO.db";
   
   
    public DatabaseHelper2(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
        Log.i("erro", "oncreate");
        /*try {
            TableUtils.createTable(connectionSource, Pessoa.class);
           
        } catch (SQLException e) {
            Log.e(DatabaseHelper.class.getName(), "Can't create databases", e);
            throw new RuntimeException(e);
        }*/

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion,
            int newVersion) {
        Log.i("erro", "onupdate");
        /*try {
            Log.i(DatabaseHelper.class.getName(), "onUpgrade");
            TableUtils.dropTable(connectionSource, Pessoa.class, true);
            onCreate(db, connectionSource);
        } catch (SQLException e) {
            Log.e(DatabaseHelper.class.getName(), "Can't drop databases", e);
            throw new RuntimeException(e);
        }*/

    }

}
 


public class HelloActivity extends Activity  {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        DatabaseHelper dbHelper = new DatabaseHelper(HelloActivity.this);
        setContentView(R.layout.main);
    }
}


28 Ago 2011, 21:08
Perfil
Anatomy of an App
Anatomy of an App
Avatar de usuário

Data de registro: 08 Ago 2011, 15:21
Mensagens: 121
Localização: Ponta Grossa - PR / Blumenau - SC
Mensagem Re: Android + ORMLite (Banco de Dados Orientado a Objeto)
Muito bom, pretendo testar esse código quando chegar em casa =)

_________________
App: ThinkTwice - https://play.google.com/store/apps/details?id=leitura.silenciosa.main
App: InstantGilGomes - https://play.google.com/store/apps/details?id=br.com.pinguimmaroto.instantgilgomes
Blog Pessoal: Cedulio Cezar - http://blog.ceduliocezar.com.br
Blog: Pedreiros do Software - https://pedreirosdosoftware-pedreiros.rhcloud.com


Editado pela última vez por ByddU em 09 Ago 2012, 11:02, num total de 1 vezes



29 Set 2011, 17:25
Perfil
What is Android?
What is Android?

Data de registro: 07 Abr 2010, 16:22
Mensagens: 3
Mensagem Re: Android + ORMLite (Banco de Dados Orientado a Objeto)
Bom dia jlferrari.

To começando a desenvolver com o Android e pesquisando sobre como utilizar banco de dados orientado a objetos achei esse post seu.

Não ficou faltando nenhum código na classe dbHelper? Quando chamo o método getDao do método getPessoaDao diz que tal método [getDao] não foi definido.

Desde já agradeço pela ajuda.


17 Out 2011, 04:25
Perfil
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 4 Mensagens ] 

Quem está online

Usuários vendo este fórum: Aderbal Nunes, afpcp, alansousa, alex, alexandrepom, alexandreufcg, am2net, amarildolacerdas, anaguerra, Anakin Skywalker, Bass, bocajunior88, brenda, brunomalka, caliow, canaville, cassianotartari, celiapinheiro, cesschneider, christian, cleiton_maciel, compto, cyzko, d.paim, dalmeidabr, Daniel Batista, Darth Sidious, Demerval, digiwise, dnakamashi, Dorpho, dr.faro, du_sr, e-azuos, edsonel, Eduardo - Brasil, eloilton, faco, felipedornelas, fernandodotnet, ferrodecaju, flashking, Flavio, francismarconcini, freak, Gabriel Laet, garretereis, Geovanne Duarte, gfgodoy, Gui Pereira, heliopassos, henrique.cardoso, henrique.garcia, Idelto, itsN, j-menezes, jacksonvpj, jairodealmeida, Jalerson, jefficojava, jhonguitar, jlucasps, johnnyjx, jrchuteboxe, kennedyximenes, kristopher, lazarodm, leanderdulac, leo, leonardodamata, levita, lfalcao, lkunta, Lucious, Mace Windu, Marcelo Alves, marcelorferrari, marcos_trb, Marlus Dias Silva, martins, Maxtremus, Michel, mlemos, nakahara, nandopierre, neiesc, neviim, nilsgome, nishimura.ichigo, nobrejack, Obi-Wan Kenobi, On_7, onaiggac, otium, paulabr, paulosantos, paulovaz, pgbatera, phsantos, piantino, Rafael, ramonrabello, ramonsa, renanpl, renatodondoni, retardad0, roberto caceres, Rodrigo, Rogério, Roney dos Santos, rosano, rotmeil, rubens_olv, Rufino, ruizsa, SERGIO RODRIGUES, SirBagda, teamamus, thiago20, tiagocomerio, Topeca, Vania, vieira, voliverio, Wesleyceraso, wylken, xikin, yeltsinlima e 1 visitante


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:

© 2007 - 2013 Portal Android - Comunidade de Desenvolvedores da Plataforma Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi