(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; Criando o banco de dados a partir da API Android 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 SQLiteStudio, SQLite Expert Personal ou o SQLite Plus; Utilizando o aplicativo SQLite3 pelo console do emulador;
SQLite 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.
Comandos SQL permitidos no SQLite Comando SQL de definição de dados: CREATE TABLE DROP TABLE ALTER TABLE Tipos de Dados 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 Studio Uma das opções para criação usando uma ferramenta, é o SQLite Studio que possui uma interface gráfica amigável para criarmos um banco de dados de exemplo; Segue o link do site da ferramenta: https://sqlitestudio.pl/index.rvt
Criando o banco de dados usando o SQLite Studio Depois de instalar e abrir a ferramenta, criaremos um banco de dados.
Criando o banco de dados usando o SQLite Studio Depois de instalar e abrir a ferramenta, criaremos um banco de dados.
Criando o banco de dados usando o SQLite Expert Personal Criação da tabela Disciplina: Android e Bancos de Dados
Criando o banco de dados usando o SQLite Studio Inserindo dados na tabela Disciplina: 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, 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; 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 Android Device Monitor: Android e Bancos de Dados 1 O emulador tem de estar ativo para podermos utilizar o Android Device Monitor.
Copiando o banco de dados para o Emulador Acessando o Android Device Monitor: Android e Bancos de Dados 3 2
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.
Criando o Banco de Dados a partir da API Android Para criar um banco de dados a partir da API do Android usaremos SQLiteOpenHelper; Devemos criar uma classe que herda de SQLiteOpenHelper, e sobrescreve (override) os métodos oncreate e onupgrade; O método oncreate é automaticamente chamado quando a aplicação roda pela primeira vez; sua tarefa é criar a base de dados; Como novas versões da aplicação podem ser lançadas, a base de dados pode ser atualizada também, uma tarefa que dispara o método onupgrade; Quando você entrega uma nova versão da base de dados, você também deve incrementar a versão. Para acessar o banco de dados, instancie a subclasse de SQLiteOpenHelper.
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 orderby: 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 Acesso a Banco de Dados. (Parte 2).
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.