(Usando o SQLite) Programação de Dispositivos Móveis Mauro Lopes Carvalho Silva Professor EBTT DAI Departamento de Informática Campus Monte Castelo Instituto Federal de Educação Ciência e Tecnologia do Maranhão
Objetivos Nesta aula iremos apresentar como usar o SQLite um leve e poderoso banco de dados que pode ser integrado às aplicações Android. Vamos entender como utilizá-las. Nosso objetivo principal é aproximar o aluno do desenvolvimento de um aplicativo básico.
Plano de Aula Android e Banco de Dados Introdução; Criando o banco de dados usando o SQLite Expert Personal; Copiando o banco de dados para o Emulador; Abrindo o banco de dados; Inserção de registros no banco de dados; Atualização de registros no banco de dados; Exclusão de registros do banco de dados; Busca de registros no banco de dados; Manipulando um banco de dados através do Android.
Introdução O Android tem suporte ao SQLite, um leve e poderoso banco de dados; Cada aplicação pode criar um ou mais banco de dados, que ficam localizados na seguinte pasta, relativa ao nome do pacote do projeto: /data/data/nome_pacote/databases O banco de dados pode ser criado de várias formas: Utilizando a API do Android para o SQLite; Usando um cliente do SQLite como o SQLite Expert Personal ou o SQLite Plus; Utilizando o aplicativo SQLite3 pelo console do emulador;
Criando o banco de dados usando o SQLite Expert Personal Usaremos a ferramenta SQLite Expert Personal que possui uma interface gráfica amigável para criarmos um banco de dados de exemplo; O instalador da ferramenta se encontra no site da disciplina; O SQLite é um mecanismo independente e transacional que não requer nenhum processo separado no servidor; O SQLite remove de forma agressiva recursos que não são absolutamente necessários, diminuindo muito seu peso para o sistema; O SQLite não é um projeto do Google, há na verdade uma equipe internacional de desenvolvedores que trabalham principalmente nas questões de capacidade e confiabilidade do software.
Criando o banco de dados usando o SQLite Expert Personal Depois de instalar e abrir a ferramenta, criaremos um banco de dados. Para isso, entre no menu File>New Database e preencha o que se pede: Database File: arquivo salvo em disco que corresponde ao banco de dados criado; Database Alias: apelido para identificar o banco de dados. Será o nome utilizado no código-fonte para referenciar o banco.
Criando o banco de dados usando o SQLite Expert Personal Comando SQL de definição de dados: CREATE TABLE DROP TABLE ALTER TABLE Tipo do SQLite TEXT: uma string de texto armazenada utilizando a codificação do banco de dados; REAL: um valor de ponto flutuante, armazenado como um número de ponto flutuante IEEE 8 bytes; BLOB: dados binários indeterminados (arquivos executáveis, imagens, etc; INTEGER: um inteiro sinalizado que vai de 1 a 8 bytes, dependendo da magnitude. Explorando a ferramenta você perceberá que há vários outros tipos de dados e que os comandos SQL padrão podem ser todos utilizados.
Criando o banco de dados usando o SQLite Expert Personal Criação da tabela Carro: Android e Bancos de Dados Após o refresh temos a tabela criada Comando SQL para criação da tabela Carro Botão para execução do comando SQL
Criando o banco de dados usando o SQLite Expert Personal Inserindo dados na tabela Carro: Android e Bancos de Dados
Criando o banco de dados usando o SQLite Expert Personal Inserindo dados na tabela Carro: Android e Bancos de Dados
Copiando o banco de dados para o Emulador Agora que o banco de dados foi criado, o próximo passo é enviá-lo para o emulador; Antes precisamos criar um projeto no Eclipse, porque cada banco de dados é salvo no pacote de sua aplicação, de modo que o pacote precisa existir antes de o arquivo ser importado; Após criar o projeto devemos executá-lo (Run as>android Application); Isso fará com que o projeto seja instalado no emulador e o pacote seja criado na estrutura de diretórios do sistema operacional; Agora já podemos abrir a Janela do File Explorer e navegar até a seguinte pasta: /data/data/nomedoprojeto/databases Se a pasta databases não existir, você poderá cria-la. Envie o banco de dados que foi salvo na máquina para essa pasta do emulador.
Copiando o banco de dados para o Emulador Acessando o File Explorer: 1 2 3
Abrindo o banco de dados Depois e enviar o banco de dados para o emulador, basta utilizar o método openorcreatedatabase (nome, modo, fábrica); String nome: Nome do banco de dados; int modo: Modo de abertura do banco de dados. Pode ter os valores Context.MODE_PRIVATE para usar o banco de dados somente na aplicação ou as constantes Context.MODE_WORLD_READABLE e Context.MODE_WORLD_WRITEABLE para que outras aplicações consigam ler e escrever nesse banco de dados, respectivamente; CursorFactory fabrica: implementação de CursorFactory opcional para instanciar um objeto Cursor quando uma busca (query) é realizada. Em nosso caso passaremos um valor nulo, pois usaremos a implementação padrão do Android. Usaremos um objeto da classe SQLiteDatabase para receber uma referência do banco de dados aberto na aplicação.
Inserção de registros no banco de dados Inserir registros no banco de dados é bem simples. Basta criar um objeto do tipo ContentValues com as informações necessárias, ele funciona semelhante a uma HashTable, com chave e valor; Depois de criar o objeto ContentValues com todos os valores necessários para inserir o registro, basta chamar o método SQLiteDatabase.insert(tabela, nullcollumnhack, valores); String tabela: Nome da tabela; int nullcolunhack: Nome de uma coluna opcional para não permitir que um registro completamente nulo seja inserido. Não utilizaremos este campo; ContentValues valores: Estrutura de chave e valores, com os valores para inserir.
Atualização de registros no banco de dados Para atualizar um registro deve-se utilizar o método SQLiteDatabase.update(tabela, valores, where, whereargs) e passar uma string para o argumento where do método, onde o valor do id do registro pode ser utilizado para identificar o registro que deve ser atualizado; String tabela: Nome da tabela; ContentValues valores: Estrutura de chave e valores, com os valores para atualização. String where: String com a cláusula where utilizada para identificar o registro. Nesse caso, pode ser uma string com o texto id=1, ou uma string com o texto id=?, tornando necessário usar o último argumento para informar o valor do? ; String whereargs[]: Array com os parâmetros necessários, caso a cláusula where defina algum parâmetro com?. Este uso é similar ao uso do JDBC.
Exclusão de registros do banco de dados Para remover um registro deve-se utilizar o método SQLiteDatabase.delete(tabela, where, whereargs) e passar uma string para o argumento where do método para identificar o registro que deve ser excluído; String tabela: Nome da tabela; String where: String com a cláusula where utilizada para identificar o registro. Nesse caso, pode ser uma string com o texto id=1, ou uma string com o texto id=?, tornando necessário usar o último argumento para informar o valor do? ; String whereargs[]: Array com os parâmetros necessários, caso a cláusula where defina algum parâmetro com?. Este uso é similar ao uso do JDBC.
Busca de registros no banco de dados Para buscar informações no banco de dados deve-se utilizar o método SQLiteDatabase.query (distinct, tabela, colunas, selecao, selecaoargs, groupby, orderby); boolean distinct: Mesmo funcionamento da palavra distinct do SQL. Esse parâmetro é opcional; String tabela: Nome da tabela; String colunas[]: Array com o nome das colunas para seleção; String selecao[]: Contém a cláusula where utilizada para filtrar os registros. Para não usá-lo basta informar nulo. String selecaoargs[]: Argumentos? da cláusula where, caso necessário; String groupby: Nome das colunas para agrupar (group by); String groupby: Nome das colunas para ordenar (order by).
Uma outra alternativa No modelo de programação do JDBC (Java) trabalhamos com vários objetos baseados em classes e interfaces, tais como: Connection, PreparedStatements, Resultset, etc; No Android temos uma alternativa semelhante, principalmente ao uso do PreparedStatements e o seu bind de argumentos; O método execsql(string sql, Object[] bindargs): String sql: String representando o comando SQL a ser executado; Object bindargs[]: lista de valores a ser substituídos pelas interrogações (placeholders); String delsql = "DELETE FROM carros WHERE nome =?"; Object[] bindargs = new Object[]{"Fiat"}; db.execsql(delsql, bindargs);
Uma outra alternativa
Manipulando um banco de dados através do Android
Dúvidas Página do Professor Mauro: http://www.dai.ifma.edu.br/~mlcsilva
Próxima Aula Desenvolvimento de um aplicativo básico usando o Google Android: Banco de Dados
Referências Google Android: aprenda a criar aplicações para dispositivos móveis com o Android SDK - Ricardo R. Lacheta, São Paulo: Novatec, 2010.