Sie sind auf Seite 1von 25
Introdução ao Android Persistência de Dados

Introdução ao Android

Persistência de Dados

Roteiro de Aula

Persistência de Dados

○ SQLite ■ Criação do Banco de Dados Classes SQLiteOpenHelper, SQLiteDatabase e

ContentValues Inserção, Atualização, Exclusão e Busca de registro no

Banco de Dados ■ Classe Cursor Referências

Persistência de Dados

Aplicações em geral necessitam persistir dados. O Android oferece as seguintes opções:

Armazenamento interno: persistência de dados na memória interna do dispositivo Armazenamento externo: persistência de dados em âmbito externo ao dispositivo (Ex. cartão de memória) Bases de dados SQLite: persistência de dados estruturados em uma base de dados privada

SQLite

O Android tem integração nativa com o SQLite (www.sqlite.org), um leve e poderoso banco de dados

Cada aplicação pode criar um ou mais bancos de dados, que ficam localizados em:

/data/data/nome_pacote/databases

O banco de dados só é visível para a aplicação que o criou

Criação do Banco de Dados

API do Android (executar SQL) Adotado aqui pois permite criar pela aplicação

Cliente gráfico do SQLite

SQLite Expert Personal (gratuito)

 

Usando SQL via linha de comando (sqlite3 -

<pasta_android>\tools\sqlite3.exe)

Nos 2 últimos, após criar, é preciso mover o arquivo para a pasta /data/data/<pacote>/databases do emulator

Criação de um Banco de Dados usando a API

Para criar e atualizar uma base de dados em uma aplicação Android, é recomendado criar uma subclasse de SQLiteOpenHelper e devese implementar os métodos:

onCreate(), que é chamado pelo Framework Android para execução dos comandos SQL para criar a base de dados

onUpgrade(), que é chamado quando a versão da base de dados é incrementada na aplicação, permitindo executar os comandos SQL necessários para atualização do esquema da mesma

Criação de um Banco de Dados usando a API

A classe SQLiteOpenHelper fornece os métodos getReadableDatabase() e getWritableDatabase() para obter acesso ao objeto SQLiteDatabase – para leitura ou escrita, respectivamente

Exemplo de criação de Banco de Dados usando API
Exemplo de criação de Banco de Dados usando API

Classe SQLiteOpenHelper

Classe SQLiteOpenHelper

Classe SQLiteOpenHelper

❏ SQLiteDatabase é a classe base para trabalhar com o SQLite no Android e fornece métodos
❏ SQLiteDatabase é a classe base para trabalhar com o SQLite no Android
e fornece métodos para abrir, consultar, atualizar e fechar a base de
dados.

Classe SQLiteOpenHelper

Inserção de registros no banco de dados

ContentValues values = new ContentValues(); values.put("nome", "Marcos"); values.put("telefone", "98765432"); SQLiteDatabase db = new DatabaseHandler(context).getWritableDatabase(); db.insert("contatos", null, values)

// O código anterior equivale ao seguinte SQL

// insert into table contatos(nome,telefone) values (“Marcos”,“98765432”);

Inserção de registros no banco de dados

SQLiteDatabase.insert(tabela, nullColumnHack, valores)

 
 

Parâmetro

Descrição

String tabela

Nome da Tabela

String nullColumnHack

Nome de uma coluna opcional usada para não permitir que um registro completamente nulo seja inserido.

ContentValues valores

Estrutura de chave e valores, com os valores para inserir

Classe ContentValues

ContentValues Permite definir pares chave-valor, onde a chave representa o identificador da coluna na tabela e o valor representa o conteúdo dessa coluna.

Equivalente a um HashMap put(String key, valor)

Atualização de registros no banco de dados

ContentValues values = new ContentValues(); values.put("nome", "Marcos da Silva"); values.put("telefone", "99999999"); SQLiteDatabase db = new DatabaseHandler(context).getWritableDatabase(); db.update("contatos", values, "_id=?", new String[]{"1"});

// sql: update contatos set nome=“Marcos ...

// Atualiza o contato cujo id é igual a 1

where _id=1;

telefone=“

”,

...

Atualização de registros no banco de dados

SQLiteDatabase.update(tabela, valores, where, whereArgs)

Parâmetro

Descrição

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. 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 “?”

Exclusão de registros no banco de dados

 

SQLiteDatabase db = new DatabaseHandler(context).getWritableDatabase(); db.delete("contatos", "_id=?", new String[]{"1"});

// sql: delete from contatos where _id=1;

// Deleta o contato cujo id é igual a 1

 

Exclusão de registros no banco de dados

SQLiteDatabase.delete(tabela, where, whereArgs)

Parâmetro

Descrição

String tabela

Nome da Tabela

String where

String com a cláusula where utilizada para identificar o registro. 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 “?”

 

Busca de registros no banco de dados

   

SQLiteDatabase db = new DatabaseHandler(context).getWritableDatabase(); Cursor c = db.query("contatos", new String[]{"_id", "nome", "telefone"}, "nome=?“, new String[] {"Marcos Silva"}, null, null, null); // Se encontrou if(c.getCount() > 0) { c.moveToFirst(); // Posiciona no primeiro resultado

 

// Utiliza os métodos getLong(índice), getString(índice), etc para recuperar os valores long id = c.getLong(0); String nome = c.getString(1); Contato contato = new Contato(id, nome); } // Sql: SELECT _id, nome, telefone from contatos where nome=“Marcos // seleciona o contato cujo nome é igual a "Marcos Silva"

...

 

Busca de registros no banco de dados

SQLiteDatabase.query(distinct, tabela, colunas, seleção, seleçãoArgs, groupBy, having, orderBy, limit)

 

Parâmetro

Descrição

 

Boolean distinct

Usado para que o resultado não contenha registros duplicados. É opcional e existe uma assinatura deste método sem ele.

 

String tabela

Nome da Tabela

 

String colunas

Array com os nomes das colunas para seleção. Passar o valor null retorna todas as colunas.

 
   

Busca de registros no banco de dados

SQLiteDatabase.query(distinct, tabela, colunas, selecao, selecaoArgs, groupBy, having, orderBy, limit)

 

Parâmetro

Descrição

 

String selecao

Cláusula where utilizada para filtrar os registros. Passar os null retorna todos os registros.

 

String[] selecaoArgs

Argumentos “?” da cláusula where, caso necessário.

 

String groupBy

Nome das colunas para agrupar (group by). Passar null não agrupará registros.

 
   

Busca de registros no banco de dados

SQLiteDatabase.query(distinct, tabela, colunas, selecao, selecaoArgs, groupBy, having, orderBy, limit)

 

Parâmetro

Descrição

 

String having

Filtros para os grupos criados, quando houverem.

 

String orderBy

Nome das colunas para ordenar (order by)

 

String limit

Limita o número de registros retornados pela consulta.

 
   

Classe Cursor

Uma consulta à base de dados retorna o objeto Cursor, que basicamente aponta para um registro do resultado da consulta O método int getCount() retorna o número de registros resultantes da consulta Para se mover entre os registros utilizase os métodos boolean moveToFirst() e boolean moveToNext() O método boolean isAfterLast() permite checar se não existem mais resultados da consulta

Classe Cursor

O Cursor contém métodos para obter os conteúdos das colunas resultantes como String getString(int columnIndex) e long getLong(int columnIndex) onde se passa o número da coluna desejada por parâmetro O método int getColumnIndex(String columnName) pode ser usado para tentar recuperar o índice da coluna a partir de seu nome, ou -1 caso a coluna não existe

Referências

Referências
Referências