(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 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 a partir da API Android Uma das opções para criação do banco de dados usando uma ferramenta, é o SQLite Studio que possui uma interface gráfica amigável; A criação do banco em uma ferramenta, obriga o desenvolvedor a copiar o arquivo gerado ( algo.db ) para dentro do aparelho. Em algumas versões do Android esta cópia passou a ser proibitiva; Segue o link do site da ferramenta: https://sqlitestudio.pl/index.rvt
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.
Criando o Banco de Dados a partir da API Android
Criando o Banco de Dados a partir da API Android
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.