O objetivo deste blog é demonstrar a criação, armazenamento e recuperação de dados em uma aplicação Android utilizando o banco SQLite, disponível e embarcado na plataforma Android, que ao contrário da maioria dos Bancos de Dados SQL, não necessita de um processo servidor.
O SQLite armazena as tabelas , views, índices e triggers em apenas um arquivo em disco, no qual são realizadas as operações de leitura e escrita. No Android, o banco de dados é acessível por qualquer classe da aplicação que o criou mas não pode ser acessado por outra.
Quando a aplicação que contém o banco de dados é desinstalada, os dados armazenados também são removidos.
Criando o Banco
Para utilizar o SQLite necessitamos de uma API que já possua todo o trabalho de se comunicar com o banco de dados encapsulado dentro dela. Este é o papel da classe SQLiteOpenHelper, que devemos herdar. Esta classe facilita a criação, versionamento e acesso ao banco de dados.
Criando o Banco
Criando o Banco
Para utilizar o SQLite necessitamos de uma API que já possua todo o trabalho de se comunicar com o banco de dados encapsulado dentro dela. Este é o papel da classe SQLiteOpenHelper, que devemos herdar. Esta classe facilita a criação, versionamento e acesso ao banco de dados.
Criando o Banco
Ao herdar desta classe, devemos implementar os métodos onCreate e onUpgrade para criar as tabelas e incluir os dados iniciais, caso necessário, além de tratar das regras de atualização de dados e de estrutura do banco quando necessário.
Também precisaremos chamar o construtor do SQLiteOpenHelper informando o contexto, o nome do banco de dados e sua versão atual e um CursorFactory se necessário.
Um detalhe importante é que as colunas que são chaves primárias possuem o nome de _id. Esta é uma convenção utilizada no Android para que os resultados de consultas realizadas nessas tabelas possam ser utilizadas em CursorAdapters, que dependem de uma coluna com este nome.
Gravando os dados no Banco
Com o banco de dados já preparado, vamos começar a armazenar os dados das viagens. Neste momento, iremos focar em como realizar as operações no banco de dados. No método onCreate, da ViagemActivity, instanciaremos o DatabaseHelper e também criaremos referências para todas as views que contém os dados informados pelo usuário, pois teremos que gravá-los.
Agora precisaremos implementar de fato a inserção dos dados informados pelo usuário. Isto será feito no método salvarViagem, que é disparado quando o usuário pressiona o botão “Salvar”. Para realizar operações de escrita no banco de dados, devemos recuperar um SQLiteDatabase através método getWritableDatabase(), denido na classe SQLiteOpenHelper e disponível por meio de herança na nossa classe DatabaseHelper.
Para inserir os dados, podemos montar manualmente uma instrução SQL de insert ou utilizar o ContentValues informando um conjunto de dados no formato chave-valor, onde a chave é a coluna do banco de dados e o valor é o dado a ser armazenado.
Por simplicação, não realizaremos nenhuma validação dos dados, simplesmente recuperaremos os dados informados pelo usuário através das views e colocaremos em um ContentValues.
Agora que temos o ContentValues preparado, podemos invocar o método insert do SQLiteDatabase, que receberá ì parâmetros. O primeiro, informando a tabela e terceiro, receberá o ContentValues. O segundo parâmetro, onde informaremos null, representa o nome das chaves do ContentValues que devem ter seu valor inserido como null. No nosso caso, não desejamos que nenhuma coluna tenha seu valor anulado, por isso não passamos nada.
Por fim, caso o registro seja inserido com sucesso, o método insert retorna o identicador do novo registro e em caso de falha retorna -1 e mostramos uma mensagem na tela de acordo com esse resultado.
Recuperando os dados no Banco
Uma vez que as informações das viagens já estão armazenados no banco de dados, precisaremos recuperá-las para a exibição na lista de viagens, que no momento conta apenas com uma implementação temporária e dados estáticos. Na classe ViagemListActivity vamos reaproveitar os códigos que tratam da ListView e alterar a implementação do método listarViagens() para buscar as informações das viagens no banco de dados.
Para iniciar esta implementação, devemos instanciar um DatabaseHelper e também recuperar o valor limite de gastos das preferências do usuário. Podemos aproveitar e criar um SimpleDateFormat para formatar as datas recuperadas do banco de dados, tudo isso no método onCreate.
Também precisaremos chamar o construtor do SQLiteOpenHelper informando o contexto, o nome do banco de dados e sua versão atual e um CursorFactory se necessário.
Um detalhe importante é que as colunas que são chaves primárias possuem o nome de _id. Esta é uma convenção utilizada no Android para que os resultados de consultas realizadas nessas tabelas possam ser utilizadas em CursorAdapters, que dependem de uma coluna com este nome.
Gravando os dados no Banco
Com o banco de dados já preparado, vamos começar a armazenar os dados das viagens. Neste momento, iremos focar em como realizar as operações no banco de dados. No método onCreate, da ViagemActivity, instanciaremos o DatabaseHelper e também criaremos referências para todas as views que contém os dados informados pelo usuário, pois teremos que gravá-los.
Agora precisaremos implementar de fato a inserção dos dados informados pelo usuário. Isto será feito no método salvarViagem, que é disparado quando o usuário pressiona o botão “Salvar”. Para realizar operações de escrita no banco de dados, devemos recuperar um SQLiteDatabase através método getWritableDatabase(), denido na classe SQLiteOpenHelper e disponível por meio de herança na nossa classe DatabaseHelper.
Para inserir os dados, podemos montar manualmente uma instrução SQL de insert ou utilizar o ContentValues informando um conjunto de dados no formato chave-valor, onde a chave é a coluna do banco de dados e o valor é o dado a ser armazenado.
Por simplicação, não realizaremos nenhuma validação dos dados, simplesmente recuperaremos os dados informados pelo usuário através das views e colocaremos em um ContentValues.
Agora que temos o ContentValues preparado, podemos invocar o método insert do SQLiteDatabase, que receberá ì parâmetros. O primeiro, informando a tabela e terceiro, receberá o ContentValues. O segundo parâmetro, onde informaremos null, representa o nome das chaves do ContentValues que devem ter seu valor inserido como null. No nosso caso, não desejamos que nenhuma coluna tenha seu valor anulado, por isso não passamos nada.
Por fim, caso o registro seja inserido com sucesso, o método insert retorna o identicador do novo registro e em caso de falha retorna -1 e mostramos uma mensagem na tela de acordo com esse resultado.
Recuperando os dados no Banco
Uma vez que as informações das viagens já estão armazenados no banco de dados, precisaremos recuperá-las para a exibição na lista de viagens, que no momento conta apenas com uma implementação temporária e dados estáticos. Na classe ViagemListActivity vamos reaproveitar os códigos que tratam da ListView e alterar a implementação do método listarViagens() para buscar as informações das viagens no banco de dados.
Para iniciar esta implementação, devemos instanciar um DatabaseHelper e também recuperar o valor limite de gastos das preferências do usuário. Podemos aproveitar e criar um SimpleDateFormat para formatar as datas recuperadas do banco de dados, tudo isso no método onCreate.




