Universidade Federal do Piauí UFPI Centro de Ciências da Natureza CCN Curso: Ciência da Computação Disciplina: Engenharia de Software II Projeto: B Equipe: New Easii Team Tutorial de Manipulação de dados com SQLite Alexandre Cristian Lages de Araújo Artur Lima de Miranda Gustavo Lustosa Oliveira Silva Irvayne Matheus de Sousa Ibiapina José Patrício de Sousa Filho Otávio Cury Costa Castro Teresina-PI, Maio de 2016
Tutorial de Manipulação de dados SQLite 1. Introdução: SQLite é um banco de dados Open Source. Ele suporta recursos de banco de dados relacionais padrão, como sintaxe SQL, transações, etc. SQLite suporta os tipos de dados TEXT (semelhante a STRINGS em Java), INTEGER (semelhante ao LONG em Java) e REAL (semelhante ao DOUBLE em Java). Todos os outros tipos devem ser convertidos em um desses campos antes de ser salvo no banco de dados. O próprio SQLite não valida se os tipos de escrita para as colunas são realmente do tipo definido. Ou seja, você pode escrever um número inteiro em uma coluna de string e vice-versa. 2. SQLite no Android: O SQLite já vem incorporado em todo dispositivo Android. Com o SQL, o Android não requer um procedimento de configuração ou administração de banco de dados. Você só tem que definir as instruções em SQL para criar e atualizar o banco de dados. Depois disso, o banco de dados é gerenciado automaticamente para você pela plataforma Android. O acesso a um banco de dados SQLite envolve o acesso ao sistema de arquivos. Isto pode ser lento. Portanto, recomenda-se realizar operações de banco de dados de forma assíncrona. Se seu aplicativo cria um banco de dados, esta base de dados é, por padrão, salva no diretório "DATA/data/APP_NAME/databases/FILENAME". As partes do diretório acima são construídas com base nas seguintes regras. DATA é o caminho que o método Environment.getDataDirectory() retorna. APP_NAME é o nome do aplicativo. FILENAME é o nome especificado no código do aplicativo para o banco de dados. 3. Packages SQLite: O pacote android.database contém todas as classes necessárias para trabalhar com bancos de dados. O pacote android.database.sqlite contém as classes específicas para o SQLite.
4. SQLiteOpenHelper: Para criar e atualizar um banco de dados na sua aplicação Android você deve criar uma subclasse da classe SQLiteOpenHelper(como no exemplo MySQLiteHelper.java). No construtor de sua subclasse você deve chamar o método super() do SQLiteOpenHelper, especificando o nome do banco de dados e a versão do banco de dados atual. O versionamento do banco de dados é importante para suportar atualizações de sua aplicação caso haja alterações nas tabelas. Para isso deve ser implementado o método onupgrade() que será executado caso a constante com a versão esteja diferente do banco salvo no dispositivo. Além disso é necessário implementar o método oncreate(), que será executado caso não haja nenhum banco salvo no dispositivo: oncreate() - é chamado pela estrutura, se o banco de dados é acessado, mas ainda não criado. onupgrade() - chamado, se a versão do banco de dados é aumentada no código do aplicativo. Este método permite que você atualizar um esquema de banco de dados existente ou para apagar o banco de dados existente e recriá-lo através do método oncreate(). Ambos os métodos (exemplificados na classe MySQLiteHelper.java) recebem um objeto SQLiteDatabase como parâmetro que é a representação Java da base de dados. A classe SQLiteOpenHelper fornece o getreadabledatabase() e getwriteabledatabase(), métodos para obter acesso a um objeto SQLiteDatabase, seja em modo de leitura ou modo de escrita. As tabelas do banco de dados devem usar o identificador '_id' para a chave primária da tabela. Várias funções do Android já trabalham com essa norma. É recomendável que se crie uma classe separada por tabela. Esta classe define métodos estáticos oncreate() e onupgrade(). Desta forma, sua implementação do SQLiteOpenHelper permanece legível, mesmo se você tiver várias tabelas. 5. Classe SQLiteDatabase: SQLiteDatabase é a classe base para trabalhar com um banco SQLite no Android e fornece métodos para abrir, consultar, atualizar e fechar o banco de dados (exemplificados em CommentsDataSource.java). Mais especificamente SQLiteDatabase fornece os métodos insert(), update() e delete(). Além disso, fornece o método execsql(), que permite a execução direta de uma instrução SQL.
O objeto ContentValues permite definir "chave/valor". A chave representa o identificador de coluna da tabela e o valor representa o conteúdo para o registro da tabela nesta coluna. ContentValues pode ser usado para inserções e atualizações de entradas de dados. As consultas podem ser criados através dos métodos rawquery() e query() ou através da classe SQLiteQueryBuilder. rawquery() aceita diretamente uma instrução SQL select como entrada. query() fornece uma interface estruturada para especificar a consulta SQL. SQLiteQueryBuilder é uma classe que ajuda a construir consultas SQL. A documentação dessas funções é detalhada nesse link: https://developer.android.com/reference/android/database/sqlite/sqlitedatabase.html 6. Cursor: A consulta retorna um objeto Cursor. Um Cursor representa o resultado de uma consulta e, basicamente, aponta para uma linha do resultado da consulta. Desta forma o Android guarda os resultados da consulta de forma eficiente ao invés de carregar todos os dados na memória. Para obter o número de elementos resultantes da consulta utilize o método getcount(). Para se deslocar entre cada uma das linhas (ou raw) de dados individuais, você pode usar os métodos movetofirst() e MoveToNext(). O método isafterlast () permite verificar se o final da 'query' resultante foi atingda. Cursor fornece métodos getxxxx(), por exemplo, getlong(columnindex), getstring(columnindex) para acessar os dados da coluna para a posição atual do resultado. O "columnindex" é o número da coluna que você está acessando (contando a partir do 0). Cursor também fornece o método getcolumnindexorthrow(string), que permite obter o índice da coluna a partir do nome da coluna. Um cursor precisa ser fechado com a chamada de método close(). Para facilitar a exibição (numa ListView por exemplo) dos dados resultantes da consulta, você pode usar o SimpleCursorAdapter que mapeia as colunas para as Views baseada no Cursor passado como parâmetro. Exemplo do uso do Cursor pode ser visto em CommentsDataSource.java, e a documentação dessa classe pode ser visualizada nesse link: https://developer.android.com/reference/android/widget/simplecursoradapter.html
MySQLiteHelper.java Comment.java
Métodos a ser inseridos na Activity