DESENVOLVER PARA ANDROID: PERSISTENCIA COM SQLite I (Criando o Modelo e DAO).

Apesar da crescente capacidade dos aparelhos móveis,  ainda não é viável guardar um banco de dados completo nesses dispositivos.

Para persistirmos os dados no Android, usaremos o SQLite e alguns arquivos arquivos de sistema, os SharedPreferences, que permitem acessarmos dados persistidos.

Esse post pretendo dividir em duas a quatro partes(to só o bagaço pra pensar melhor). Ao final desses posts, teremos uma tela de formulário com as principais funcionalidades para fazermos um CRUD ou perto disso.

Nesse primeiro post começaremos fazendo nossa classe de modelo(POJO/JavaBean) e a classe DAO, para acesso do banco de dados.

Deixando de “mimimi”, criaremos a classe de modelo que queremos representar no nosso BD, neste exemplo, a classe Pessoa (nada batido🙂 ).


 private int id;
 private String nome;
 private String telefone;
 private String endereco;
 private String site;
 private String foto;

 

//respectivos getters e setters

//também seria interessante sobrescrever o método toString().

Fazendo uma reprise, o DAO, ou Data Access Object, é um padrão que deve funcionar como “ponte” entre o mundo relacional do banco de dados, com o mundo OO das linguagens de alto nível como o java. No caso do Android, o SQLite que é um banco mais leve, salva os objetos em arquivos locais.

Veremos que a metologia de implementação do DAO no Android se assemelha bastante com o JDBC do java.

Para criar uma classe PessoaDAO.java,  temos que estender SQLiteOpenHelper (ai está a diferença) e ter um construtor que receba um objeto do tipo Context. Esse objeto traz informações sobre a aplicação. Ao receber esse objeto, chamamos o construtor da classe mãe, passando o contexto e algumas configurações do seu banco em particular.

Logo de saída, precisaremos sobrescrever dois métodos:

  • onCreate, método que ao executar cria o nosso BD.
  • onUpgrade, executado na alteração da estrutura do banco.

public class PessoaDAO extends SQLiteOpenHelper{

       public PessoaDAO(Context context, String name, CursorFactory factory,
           int version) {
             super(context, name, factory, version);
       // TODO Auto-generated constructor stub
       }

       @Override
       public void onCreate(SQLiteDatabase db) {
       // TODO Auto-generated method stub

       }

       @Override
       public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
       // TODO Auto-generated method stub

       }

}

Precisamos corrigir  o construtor da classe, criaremos as constantes necessárias para configuração do banco:


private static final String TABELA = "Pessoa";
 private static final int VERSION = 1;

 public PessoaDAO(Context context) {
 super(context, TABELA, null, VERSION);
 }

E por fim, para criarmos o banco, precisamos de um script SQL de criação informando as colunas e seus tipos.


"CREATE TABLE " + TABELA +
 "( id INTEGER PRIMARY KEY," +
 " nome TEXT UNIQUE NOT NULL," +
 " telefone TEXT," +
 " endereco TEXT," +
 " site TEXT, " +
 " foto TEXT" +
 ");";

Essa query será executada na criação do banco, então inserimos no método onCreate().

E se alguma alteração for feita no banco, por exemplo, excluimos (essa não é uma boa técnica, perderemos os dados, mas isso é só um pequeno tutorial) o anterior e criamos um novo com as alterações.

a seguir como ficaram os métodos em questão:

 @Override
 public void onCreate(SQLiteDatabase db) {
      String sql = "CREATE TABLE " + TABELA +
         "( id INTEGER PRIMARY KEY," +
         " nome TEXT UNIQUE NOT NULL," +
         " telefone TEXT," +
         " endereco TEXT," +
         " site TEXT, " +
         " foto TEXT" +
         ");";
      db.execSQL(sql);

 }

 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
       db.execSQL("DROP TABLE IF EXISTS " + PessoaDAO.TABELA);
       this.onCreate(db);

 }

To be continued..

6 Responses to DESENVOLVER PARA ANDROID: PERSISTENCIA COM SQLite I (Criando o Modelo e DAO).

  1. ademar111190 disse:

    Muito bom cara!!!

    seu exemplo é exemplar rsrsr🙂

  2. esme123 disse:

    Excelente tuto!!!!!…. en que termina, porque necesito hacer lo mismo para un proyecto en android???

  3. Robson carvalho disse:

    Excelente! Já estou procurando a segunda parte.

  4. rnunesgarcia disse:

    Cara, tenho uma dúvida. Você acha melhor criar uma classe só com os scripts e a criação do banco, ou colocar a conexão lá tbm?
    Porquê se toda vez que eu chamar a conexão ele passar pelos métodos de criação do banco, aí complica. O que você acha? separa ou não tem problema de deixar na mesma classe extendida do SqlLiteOpenHelper.

    E se for melhor deixar separado. Qual é o melhor ponto para criar o banco? Na primeria activity instanciada ou em outro local?
    Obrigado.

    • Yuri Adams disse:

      Cara, vi esse comentário só agora.
      Seguinte, independente de onde sua conexão e script de criação fique, seria bom respeitar os bons princípios de orientação a objeto.
      Nesse exemplo, como um tutorial, eu talvez tenha me equivocado em executar esse script sempre que um método de persistência for invocado. Mas a idéia é rodar o script e gerar o banco no momento de rodar a app pela primeira vez. E a conexão para não ser executada sempre que o método for invocado, vc pode utilizar artifícios de padrões de projeto como o sigleton(http://wmagician.wordpress.com/2008/01/02/padrao-singleton-em-java/).

      Mas como eu disse inicialmente, deixe que sua classe tenha uma única responsabilidade (http://en.wikipedia.org/wiki/Single_responsibility_principle).

      No mais é isso. Espero ter ajudado.

      • Raphael Nunes disse:

        Ah, muito obrigado Yuri, não conhecia esse Sigleton, gostei do artigo. Na aplicação que eu brincando agora, eu fiz desse jeito mesmo, tudo na mesma classe, mas na próxima vou tentar usar esses principios.
        Valeu.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: