DESENVOLVER PARA ANDROID: PERSISTENCIA COM SQLite II (OUTROS MÉTODOS PARA O NOSSO CRUD.).

Tendo a estrutura do nosso esquema criado, vamos criar outros métodos no nosso DAO que será necessário para “fecharmos” nosso CRUD de Pessoa.

O estilo é bastante semelhante com o JDBC do Java, ou seja, teremos que converter manualmente um objeto na estrutura da tabela. Com uma diferença, não será preciso escrever a query em si, os métodos do SQLiteDatabase já as encapsula. Apenas temos que cuidar dos parâmetros que passaremos pra eles.

Um objeto SQLiteDatabase já tem pronto o método insert, que recebe o nome da tabela. Assim, para inserir um novo registro no BD, não precisamos do SQL, basta usar o método que o SQL será gerado automaticamente. Segue o exemplo do método inserir na nossa classe PessoaDAO:


public void inserir(Pessoa pessoa){
      ContentValues valores = new ContentValues();
      valores.put("nome", pessoa.getNome());
      valores.put("site", pessoa.getSite());
      valores.put("foto", pessoa.getFoto());
      valores.put("telefone", pessoa.getTelefone());
      valores.put("endereco", pessoa.getEndereco());

      getWritableDatabase().insert(TABELA, null, valores);
 }

Tendo o nosso “C” do CRUD em ordem, vamos para a listagem das pessoas cadastradas no banco. Para buscar todas as pessoas teremos que lidar com o objeto Cursor, fazendo um paralelo com o jdbc, se trata de um primo do ResultSet.

E da mesma forma do insert, contamos o método query que nos dá mais liberdade nas buscas(liberdade = maior número de parâmetros :)).


Cursor c = getWritableDatabase().query(TABELA, COLUNAS, null, null, null, null, null);

Os outros parâmetros que deixamos em branco nos permite fazer select, groupBy, having, sortBy, por ai vai. É só explorar a API para ganhar prática nesses parâmetros.

Similarmente ao ResultSet, tendo o resultado da busca em um Cursor, bastamos iterar sobre suas linhas preenchendo o objeto Pessoa.


public List<Pessoa> getLista(){
      Cursor c = getWritableDatabase().query(TABELA, COLUNAS, null, null, null, null, null);
      List<Pessoa> lista = new ArrayList<Pessoa>();
      while(c.moveToNext()){
          Pessoa pessoa = new Pessoa();
          pessoa.setId(c.getInt(0));
          pessoa.setNome(c.getString(1));
          pessoa.setTelefone(c.getString(2));
          pessoa.setEndereco(c.getString(3));
          pessoa.setSite(c.getString(4));
          pessoa.setFoto(c.getString(5));

          lista .add(pessoa);
      }
  c.close();

 return lista;

 }

A app do nosso crud ganhando corpo..

É isso galera, agora é dar uma olhada nas coisas da Faculdade porque a “boca é quente”.

16 Responses to DESENVOLVER PARA ANDROID: PERSISTENCIA COM SQLite II (OUTROS MÉTODOS PARA O NOSSO CRUD.).

  1. esme123 says:

    nose porque en el metodo
    Cursor c = getWritableDatabase().query(TABELA, COLUNAS, null, null, null,null);
    me marce error en la COLUNAS,
    como se debe definir????

    • Yuri Adams says:

      COLUNAS deve ser um array de String com os nomes das colunas que faz parte do BD. Por exemplo: private static final String[] COLUNAS = {“id”, “nome”};

  2. esme123 says:

    muito obrigado pela sua resposta rápida …. Estou tentando importar um banco de dados SQLite Gestor para evitar o trabalho de criação de tabelas com SQL em Java.
    Eu segui este tutorial,

    http://blog.findemor.es/2011/02/como-programar-en-android-guia-5/
    somente quando tento consultar o log, eu recebo o seguinte:

    caused by:android.databases.sqlite.SQLIteException no such table; clientee , while compiling SELECT * FROM

    já tentou isso?
    ou pode adaptar o seu código para inserir e consulta para fazer outras mais mesas dentro do banco de dados?

    muito obrigado

  3. esme123 says:

    como puedo ir insertando mas filas a la base de datos sin que se borre las que ya estan?

  4. vinnydelgado says:

    O meu fica dando nullpointerexception, tem ideia do que pode ser ?

  5. Érick says:

    Cara, o meu esta chamando o seguinte erro:

    ERROR AndroidRuntime Caused by: java.lang.IllegalStateException: getWritableDatabase called recursively

  6. Wilton says:

    cara to inserindo no banco de dados e agora eu quero fazer uma consulta como eu faço ?
    quero fazer essa consulta quando eu clico num botão o codigo que eu to usando é assim.

    Button Consulta = (Button) findViewById(R.id.botaoConsultar);

    Consulta.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

    output = (TextView) findViewById(R.id.out_text);
    List names = dh.selectAll();
    StringBuilder sb = new StringBuilder();

    sb.append(“Arquivos do Banco de Dados:\n”);

    for (String name : names) {

    sb.append(name + “\n”);
    }

    Log.d(“EXAMPLE”, “names size – ” + name.size());

    output.setText(sb.toString());

    }
    });

    se nao me engano esse codigo é seu mas nao sei se o metodo que se deve usar é realmete esse selectAll ou um que se chama getAlunoById.
    por favor me ajuda sou novo em android.

    • Yuri Adams says:

      Cara depende da consulta que vc quer fazer. O que vc quer consultar no banco?

      • Wilton says:

        Estou inserindo os campos.nome telefone e endereco e depois quero consiltar os.msms campos.para.ter certeza se.estou inserindo da maneira correta, se vc puder me mostrar um exemplo disso estou comecaondo a.desenvolver e estou tentando fazer um cadastro simple no bd,obrigado pela atencao

      • Yuri Adams says:

        Cara se vc quer testar todos os valores inseridos, tenta dar um select em todos os registros:
        public List getLista(){
        Cursor c = getWritableDatabase().query(TABELA, COLUNAS, null, null, null, null, null);
        List lista = new ArrayList();
        while(c.moveToNext()){
        Objeto a = new Objeto();
        a.setId(c.getInt(0));
        a.setNome(c.getString(1));
        .
        .
        .
        // assim por diante

        lista .add(a);
        }
        c.close();

        return lista;
        }

      • Wilton says:

        Agora nao sei se a inserção esta certa da uma olhada:

        Aqui é a classe Dao onde eu to pegando os valores que foram digitados no layout

        public void inserir(aluno al){

        ContentValues valores = new ContentValues();
        valores.put(“nome”, al.getNome());
        valores.put(“telefone”, al.getTelefone());
        valores.put(“endereco”, al.getEndereco());

        getWritableDatabase().insert(TABELA, null, valores);
        }

        E aqui é qualdo se clica no botao para enviar o relatrio para o bd.Esse exemplo eu tirei de um post que vc colocou no site mas nao sei se precisa mudar alguma coisa

        Button botao = (Button) findViewById(R.id.botao_Inserir);
        botao.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
        EditText nome = (EditText) findViewById(R.id.EditNome);
        EditText telefone = (EditText) findViewById(R.id.editTelefone);
        EditText endereco = (EditText) findViewById(R.id.editEndereco);

        Aluno.setNome(nome.getEditableText().toString());
        Aluno.setTelefone(telefone.getEditableText().toString());
        Aluno.setEndereco(endereco.getEditableText().toString());

        AlunoD dao = new AlunoD(Teste_For_AlunoActivity.this);

        if(posicao != -1){
        Aluno.setId(posicao+1);
        dao.alterar(Aluno);

        }else{
        dao.inserir(Aluno);
        }
        dao.close();

      • Yuri Adams says:

        Quando vc testou esse código, qual foi a resposta?

        Houve algum erro?

  7. Olá Yuri,muito bacana o Blog. Só queria fazer uma sugestão de melhoria no método de inserção. As vezes acontece no projeto que a pessoa insere o modelo no banco e logo em seguida passa esse objeto em algum parametro para outra coisa. O problema tá que esse objeto que foi inserido no banco continua sem id.

    Se a pessoa pessoa adicionar essas 4 linhas após o getWritableDatabase,o objeto inserido no banco já recebe seu id.

    Cursor c = getReadableDatabase().query(TABELA, COLUNAS, null, null, null, null, null);
    c.moveToLast();
    pessoa.setId(c.getLong(0));
    c.close();

    🙂

Deixar mensagem para esme123 Cancelar resposta