Uso do SQLite no Android - pt.5

Listagem 5 - Implementação da classe CommentsDao

Iniciamos a implementação definindo duas variáveis que irão nortear nossa conexão e trabalho com o banco de dados: dbHelper e database. O objeto dbHelper será uma instância da nossa classe MySQLiteHelper, mostrada na Listagem 2, e será responsável por preparar o banco, assim como abrir e fechar nossa conexão com ele. Trabalhando em conjunto com o dbHelper, temos o objeto database, que como veremos mais a frente, será a instância do banco de dados, e é através dela que iremos fazer todas as operações que dependerem do banco.

Logo após essas duas variáveis, definimos um vetor de Strings, chamado allColumns, que armazena todas as colunas presentes na nossa tabela de comentários e será utilizado mais a frente para realizar consultas e inserir dados na nossa tabela.

Em seguida, definimos um construtor para nosso DAO, que recebe o contexto da aplicação e o utiliza para instanciar o objeto dbHelper. Após criado o nosso DAO, toda a estrutura de conexão já está pronta, mas o banco ainda não será criado e nem será possível realizar nenhum tipo de consulta. Para que isso seja possível, teremos que invocar o método open, que na sua definição abre a conexão com a nossa base de dados, armazenando a instância retornada pela chamada de dbHelper.getWritableDatabase() no objeto database. A partir da chamada desse método será realizada a criação do banco e será possível a realização de consultas nele. Depois dessa definição, temos o método close, que fecha as conexões existentes com o banco e com o dbHelper.

Dando continuidade, temos mais três métodos públicos que fazem parte das funcionalidades básicas disponibilizadas pelo DAO a outras classes que desejam manipular objetos do tipo Comments. Esses métodos são:

  1. createComment – armazena um novo comentário  no banco de dados.
  2. deleteComment – remove  um comentário do banco de dados.
  3. getAllComments – recupera todos os comentários armazenados no banco de dados.

O método createComment recebe uma String representando o texto do comentário a ser criado. Sua implementação é iniciada com a criação de um objeto do tipo ContentValues. Esse objeto é um conjunto de pares chave-valor, que representam o nome e conteúdo de cada campo de uma tabela. No exemplo, um único par é definido, referente à coluna de comentário. A inserção desse registro no banco é feita através do método database.insert, que retorna o valor do id do novo registro na tabela. Após o seu armazenamento, criamos e retornamos o objeto que representa o comentário recém-criado, finalizando o processo de inserção da informação na base de dados.

A implementação do método de remoção do registro é mais simples, e consiste apenas em chamar o método database.delete. Esse método recebe como parâmetro o nome da tabela e a condição de remoção, que nesse caso é a tabela comment e a condição é que o registro tenha o id igual ao passado como parâmetro para o nosso método.

Por fim, o método getAllComments é responsável por listar todos os comentários armazenados em banco. Para tal, é feita uma consulta semelhante através de uma chamada ao método database.query. Esse método possui vários parâmetros que representam as partes de uma query SQL, são eles:

  1. O nome da tabela;
  2. A lista das colunas a serem recuperadas;
  3. A cláusula WHERE (opcionalmente incluindo parâmetros);
  4. A lista dos valores para substituir os parâmetros;
  5. A cláusula GROUP BY;
  6. A cláusula HAVING;
  7. A cláusula ORDER BY.

No nosso exemplo, só passamos os dois primeiros parâmetros, indicando que a consulta deve retornar todos os registros existentes no banco de dados. O resultado desse método é um objeto do tipo Cursor, que representa o conjunto de resultados da consulta. Para recuperar os resultados é necessário navegar (iterar) pelo Cursor, obtendo um resultado por vez. No código do exemplo, essa navegação no cursor é feita através dos métodos moveToFirst, moveToNext e isAfterLast. Esses métodos, respectivamente, posicionam o cursor no primeiro registro, movem o cursor para o próximo registro e verifica se o cursor chegou ao fim dos resultados.

Logo após iterarmos sobre o Cursor, adicionamos cada comentário encontrado na lista criada no início do método, para por fim fechar o Cursor e retorná-la. A recuperação dos campos de cada registro do resultado da consulta e a criação do objeto do tipo Comment é feita através de um método auxiliar, chamado cursorToComment, que foi criado especificamente para o exemplo.

Seguindo esse processo, temos toda a estrutura para trabalhar com um banco de dados em Android. Mais detalhes sobre as classes e métodos relacionados ao uso de SQLite no Android podem ser obtidos no material indicado na Leitura Complementar.

Versão 5.3 - Todos os Direitos reservados