Introdução a SQLite


Nesse capitulo nos iremos ver como trabalhar com banco de dados local, mais conhecido com SQLite.

Com o sqlite podemos utilizar diversos recursos que existem em outros SGBD's, ex.: Criar tabela, views, indices, transações, triggers e etc. Quando criamos um banco de dados ele fica salbo na memoria interna do aparelho no diretorio /data/data/pacotedaaplicação/databases, o usuario não tem acesso a esse arquivo.

Para criamos o nosso banco de dados a nossa classe tem que herdade de SQLiteOpenHelper, ela é a responsavel por criar o nosso banco de dados caso ele não existe ou atualizar se for necessario.

Vamos criar um novo projeto para utilizarmos o SQLite. Ao criar o projeto vamos primeiro criar uma classe chamada Pessoa, essa classe vai ter 3 atributos(nome, idade e sexo) e vamos criar tambem uma tela de cadastro de Pessoa(layout e activity).

Agora vamos adicionar um Button na tela MainActivity que vai chamar a nossa tela de cadastro.

Agora vamos adicionar a seguinte biblioteca ao nosso projeto.

compile 'com.android.support:recyclerview-v7:25.1.1'

Agora vamos adicionar o recycleView a nossa MainActivity.

Agora vamos criar o layout do item do nosso recycleView.

Agora vamos criar o adapter do nosso recycleView e implementar os metodos principais.

Agora vamos informar a esse adapter qual vai ser o layout que ele vai trabalhar, ou seja, qual layout vai ser inflado para cada item do nosso RecycleView, para fazer isso nos temos que realizar as alterações no metodo onCreateViewHolder.

Para criarmos as referencias do nosso item_pessoa.xml no nosso adapter nos vamos criar ela na classe PersonViewHolder.

No Metodo onBindViewHolder nos iremos passar para o nosso layout os valores que iremos pegar a partir da lista de Pessoa.

No Metodo getItemCount nos iremos retornar a quantidade de item que sera exibido no nosso recycleView ou seja, o count do nosso array de Pessoa.

Agora vamos voltar ao nosso MainActivity, vamos criar uma instancia do nosso PessoaAdapter e vamos adicionar esse adapter ao nosso RecycleView, vamos criar uma variavel do tipo list de Pessoa e vamos tambem criar o nosso gerenciador que vai dar o formato de lista vertical ao nosso recycleView.

Agora vamos adicionar o nosso SQLite ao nosso projeto e vamos criar as funcoes de CREATE, DELETE, UPDATE, INSERT e SELECT.

Vamos agora criar a nossa classe que vai ser responsavel por criar o nosso banco e criar as nossas tabelas, vamos chamar ela de BDHelper, essa nossa classe vai herdar de SQLiteOpenHelper, ele vai obrigar a gente a implementar alguns metodos(onCreate() e onUpgrade()) e vamos tambem criar o nosso construtor da nossa classe, esse construtor é quem vai ativar o nosso SQLiteOpenHelper, no nosso construtor nos iremos utilizar o super da classe que herdamos, o primeiro parametro é o contexto, o segundo é o nome do banco, o terceiro é um factory(nos podemos colocar como null pois iremos utilizar uma versão padrão do sqlite) e o ultimo parametro é a versão do banco. Alem disso nos temos que criar duas variaveis, uma vai receber o nome do banco e a outra vai receber a versão do banco.

No nosso construtor vai ser criado o banco de dados ou ser aberto caso o banco ja exista isso é tudo feito a partir do super da classe SQLiteOpenHelper, o metodo onCreate é utilizado para criar as nossas tabelas e o metodo onUpgrade é utilizado para atualizar o nosso banco. quando tiver alguma alteração na estrutura do nosso banco basta alterarmos a nossa variavel VERSION e ele vai chamar automaticamente o onUpgrade.

Agora vamos criar a nossa tabela de usuario no metodo onCreate, para criar a nossa tabela nos iremos executar o seguinte comando

        db.execSQL("");

o objeto db é o banco de dados que nos pegamos pelo parametro do onCreate, nos chamamos o metodo execSQL que recebe como parametro um comando de banco de dados, nesse caso nos iremos colocar o create table.

No metodo onUpgrade nos iremos mandar ele apagar a nossa table e recriar ela novamente.

Agora vamos adicionar mais um atributo a nossa classe Pessoa, esse atributo vai ser o id do tipo int, ele vai ser o responsavel por ser o identificador da pessoa do nosso banco de dados.

Agora nos iremos criar a nossa classe que vai realizar as tarefas de UPDATE, DELETE, INSERT e SELECT da nossa tabela usuario, vamos chamar essa classe de PessoaDAO.

Vamos agora realizar algumas alterações nessa classe. Primeiro vamos criar uma instancia da classe SQLiteDatabase(essa variavel vai ser a responsavel por receber o nosso banco de dados), vamos criar o nosso construtor da classe, esse nosso construtor vai ter como parametro a variavel Context e vai ser nesse construtor que iremos criar um objeto do tipo BDHelper e vamos abrir o nosso banco com permissão de ler e escrever no banco, isso vai ser feito atraves de um metodo chamado getWritableDatabse().

Agora vamos criar o nosso metodo que vai inserir uma pessoa no nosso banco de dados. Para inserir um objeto no nosso banco de dados nos iremos trabalhar com uma classe chamada ContentValue, essa classe nos permite trabalhar com chave/valor, ou seja, a chave vai ser o nome da coluna do banco e o valor vai ser a variavel do objeto Pessoa. Apos adicionar todas as chaves/valores no nosso objeto contentValue nos iremos agora inserir no nosso banco, para inserir nos iremos utilizar um metodo chamado .insert() que vamos acessar a parte da nossa variavel db, o metodo .insert recebe como primeiro parametro o nome da tabela o segundo parametro seria uma regra para registros nulos e o utlimo parametro é os nossos valores.

Agora iremos criar o metodo que vai atualizar um valor na nossa tabela. Para atualizar valores a estrutura é a mesma do insert, o que muda é que agora iremos utilizar o metodo .update(), o primeiro parametro desse metodo o nome da nossa tabela, o segundo parametro é os valores que vamos colocar, o terceiro parametro é os campos que iremos utilizar para atualizar o nosso registro e o ultimo parametro é um array que nos iremos colocar o valor referente ao parametro anterior, ou seja, ele vai substituir a ? que colocamos no terceiro parametro pelo valor que colocamos no ultimo parametro.

Agora iremos cirar o metodo que vai deletar o registro da nossa tabela. Para realizar a ação de delete nos iremos chamar um metodo chamado .delete() que recebe como primeiro parametro o nome da tabela, no segundo parametro ele recebe a clausula where e no ultimo parametro o valor da nossa clausula where.

Agora vamos criar o nosso metodo que realizar uma busca em todos os dados da nossa tabela. Para realizar uma busca nos iremos chamar um metodo chamado .query( primeiro parametro é o nome da nossa tabela, segundo parametro um array de string com as colunas que nos queremos de retorno, terceiro parametro é a clausula where, o quarto parametro é os valores da clausula where, o quinto parametro é caso queriamos colocar group by no nosso select, o sexto parametro é caso queiramos colocar a clausula having, e o ultimo parametro é o order by ) esse metodo query retorna um objeto do tipo Cursor, esse objeto é o responsavel por receber o resultado do nosso select na tabela de usuario, e é a partir dele que iremos capturar os nossos dados.

Apos criar o objeto cursor nos iremos criar uma verificação para saber se ele não esta vazio, se ele não estiver vazio nos iremos colocar o nosso cursor para voltado para a primeira linha, atraves do metodo moveToFirst.

Agora nos iremos abrir um do..while no nosso codigo, no parametro do while nos iremos percorrer a quantidade de linhas que foi retornado no nosso select, para percorrer essa linhas nos iremos utilizar um metodo chamado moveToNext que podemos acessar a partir do nosso objeto cursor, dentro desse laço de repetição nos iremos criar o nosso objeto pessoa a partir dos dados que foram retornados pelo nosso cursor, para capturar os valor do nosso select pelo nosso cursor nos iremos pegar de acordo com o tipo que a coluna é e a posição dela no nosso array de colunas que nos passamos no metodo .query, apos isso iremos adicionar esse objeto pessoa dentro do nosso array que o nosso metodo selectAllPessoas retorna.

Agora vamos criar um metodo que ira retornar um determinado registro a partir do id da pessoa, para criar esse metodo a estrutura dele é a mesma do selectAllPessoas so iremos mudar o tipo de retorno que nesse caso so ira retornar um registro e nos iremos colocar as clausulas where.

Vamos agora voltar a nossa CadastroActivity e la nos iremos chamar o metodo insertPessoa que criamos no nosso PessoaDAO. Primeiro nos vamos criar a instancia da nossa classe PessoaDAO e depois vamos iniciar e e chamar o metodo inserPessoa no evento do nosso butão de cadastrar. Apos inserir o usuario nos vamos chamar o metoto onBackPressed(), esse metodo vai simular o evento de Back do android para voltar a tela anterior.

Vamos agora voltar ao nosso MainActivity e vamos realizar a chamada do metodo selectAllPessoas da nossa classe PessoaDAO para preencher o nosso recycleView com os dados que estão cadastrados no banco. Primeiro nos vamos criar a instancia da nossa classe PessoaDAO e depois vamos criar um metodo que vai iniciar e chamar o meotodo selectAllPessoas e preencher o nosso list de pessoas, nos iremos chamar esse metodo no onCreate da nossa activity. Alem disso nos temos que sobreescreve o metodo onRestart da nossa MainActivity para quando o usuario cadastrar uma nova pessoa e voltar para a MainActivity nos darmos um refresh na nossa lista do reccyleView. Para darmos um refresh na nossa lista nos iremos na nossa classe PessoaAdapter e vamos criar um novo metodo que vai receber como parametro uma lista de pessoa, e dentro desse metodo nos vamos chamar o metodo notifyDataSetChanged() para dar um refresh na nossa lista.

Agora vamos adicionar o metodo de click do nosso recycleView, para quando o usuario clicar em algum item abrir a tela de cadastro com os campos preenchidos para o usuario poder atualizar alguma informação. Para adicionar o onClick no nosso recycleView no temos que criar uma interface, nessa interface nos iremos criar a assinatura do metodo onClick.

Agora vamos implementar essa nossa interface na nossa classe MainActivity e vamos sobreescreve o metodo onClickListener.

Agora vamos ao nosso arquivo PessoaAdapter e vamos criar uma variavel do tipo RecycleViewClickHack e vamos criar um metodo para setar atribuir a essa variavel o click do nosso MainActiivty. Apos isso nos iremos informar ao nosso ViewHolder que ele vai ser um item clicavel, bastar adicionar o setOnClickListener no seu construtor, dentro do evento do onClick nos iremos passar para a nossa MainActivity a posição do item que foi clicado.

Agora vamos voltar a nossa MainActivity, vamos adicionar a referencia do RecycleViewClick do adapter e no metodo onClick nos iremos chamar o metodo selectPessoa da nossa classe PessoaDAO e vamos chamar a nossa CadastroActivity passando para ela os dados de id, nome,sexo e idade para o usuario poder alterar.

Na nossa CadastroActivity nos iremos receber os dados que foram passados via bundle e iremos colocar os valores nos nossos campos, e vamos tambem atualizar o texto do nosso button, vamos colocar ele como ATUALIZAR, no metodo onClick no button nos iremos colocar uma verificação, se o texto dele for ATUALIZAR nos iremos chamado o metodo updatePessoa da classe PessoaDAO, se o texto dele nao for ATUALIZAR ele ira seguir o fluxo de cadastrar normalmente.

Vamos agora adicionar o evento de DELETE, para o evento de delete nos iremos utilizar o onLongClick no nosso recycleView para excluir um item.

Vamos na nossa interface RecycleViewClickHack e vamos adicionar outra assinatura, essa assinatura sera a responsavel por implementar o nosso onLongClick.

Agora vamos voltar a nossa classe MainActivity e vamos implementar o metodo onLongClick e adicionar a nossa regra para excluir o item da nossa lista.

Agora vamos voltar ao nosso adapter e vamos criar o metodo removerItem que iremos chamar o metodo notifyItemRemoved, e vamos tambem adicionar o setOnLongClickListener no nosso viewHolder.

Agora vamos executar a nossa aplicação e vamos verificar como esta o funcionamento dela.

results matching ""

    No results matching ""