|
Página 1 de 1
|
[ 4 Mensagens ] |
|
Android + ORMLite (Banco de Dados Orientado a Objeto)
| Autor |
Mensagem |
|
jlferrari
What is AVD?
Data de registro: 15 Jun 2011, 16:56 Mensagens: 10
|
 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  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 |
|
 |
|
rafaelbomfim
What is DDMS?
Data de registro: 25 Jun 2010, 23:39 Mensagens: 32
|
 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 |
|
 |
|
ByddU
Anatomy of an App
Data de registro: 08 Ago 2011, 15:21 Mensagens: 121 Localização: Ponta Grossa - PR / Blumenau - SC
|
 Re: Android + ORMLite (Banco de Dados Orientado a Objeto)
Muito bom, pretendo testar esse código quando chegar em casa =)
Editado pela última vez por ByddU em 09 Ago 2012, 11:02, num total de 1 vezes
|
| 29 Set 2011, 17:25 |
|
 |
|
igorcp
What is Android?
Data de registro: 07 Abr 2010, 16:22 Mensagens: 3
|
 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 |
|
|
|
Página 1 de 1
|
[ 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
|
|