Apresentação do PowerPoint

Propaganda
Armazenamento de dados
Opções de Armazenamento



Shared Preferences
 Mecanismo simples de armazenar pares de chavevalor
Internal Storage
 Mecanismo para armazenar dados na memória do
aparelho
External Storage
 Mecanismo para armazenar dados em um storage
externo (cartões SD, USB, etc.)
SQLITE DATABASES
SQLite Databases

Android oferece um suporte completo para
banco de dados SQLite.

Banco de dados podem ser criados e
acessados por qualquer classe de uma
aplicação

Mas não podem ser acessados por outras aplicações

SQLite é uma biblioteca de software que
implementa um engenho de Banco de Dados
SQL (self-contained, serverless, zeroconfiguration, transactional)

Engenho de banco de dados mais “deployed” do
mundo

Código fonte de domínio público

Patrocinado por:
SQLite no Android

Nenhum banco de dados padrão é
oferecido para sua aplicação pelo Android


A própria aplicação precisa criar o banco de
dados, tabelas, índices e dados
Os banco de dados são acessíveis
somente pela aplicação que os criou
SQLite no Android

Para se criar, evoluir e abrir bancos de dados, a
maneira mais recomendada é criar uma subclasse
de SQLiteOpenHelper e redefinir:




Construtor
Método onCreate()
Método onUpgrade()
Outros métodos opcionais que podem ser
redefinidos


onOpen()
onDowngrade()
Construtor de sua classe Helper
public class DictionaryOpenHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = “meu_bd”;
DictionaryOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
}
Nome do banco de dados
Contexto do componente
Versão do BD
Fábrica de cursor
SQLiteOpenHelper
(Context context, String name, SQLiteDatabase.CursorFactory
factory, int version)
onCreate de sua classe Helper
public class DictionaryOpenHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = “meu_bd”;
private static final int DATABASE_VERSION = 2;
private static final String DICTIONARY_TABLE_CREATE =
"CREATE TABLE DICTIONARY (" +
“KEYWORD TEXT, " +
“DEFINITION TEXT);";
DictionaryOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DICTIONARY_TABLE_CREATE);
}
}
onUpgrade de sua classe Helper
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS DICTIONARY");
onCreate(db);
}
Como acessar o BD a partir dos
componentes (Activity, Services...)
package ufrn.aulas;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
public class HelloBDActivity extends Activity{
private SQLiteDatabase database;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DatabaseFirstExampleHelper helper = new
DatabaseFirstExampleHelper(this);
database = helper.getReadableDatabase();
}
}
Como manipular dados no BD

Usa-se execSQL()


Método adequado para execução de qualquer
SQL que não retorna resultados (INSERT,
UPDATE, DELETE)
Usa-se os métodos insert(),update(), e
delete()

Eliminam a necessidade de se trabalhar
diretamente com SQL
Usando execSQL
package ufrn.aulas;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
public class HelloBDActivity extends Activity{
private SQLiteDatabase database;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DatabaseFirstExampleHelper helper = new DatabaseFirstExampleHelper(this);
database = helper.getWritebleDatabase();
database.execSQL("INSERT INTO DICTIONARY (KEYWORD,DEFINITION) VALUES
('Android','Plataforma para Dispositivos Móveis')");
}
}
Usando os métodos específicos
private void processAdd(DialogWrapper wrapper) {
ContentValues values=new ContentValues(2);
values.put(DatabaseHelper.TITLE, wrapper.getTitle());
values.put(DatabaseHelper.VALUE, wrapper.getValue());
db.getWritableDatabase().insert("constants", null, values);
}
private void processDelete(long rowId) {
String[] args={String.valueOf(rowId)};
db.getWritableDatabase().delete("constants", "ID=?", args);
}
Buscando dados no BD

Usa-se rawQuery()


para executar um SELECT diretamente
Usa-se query()
Para passar as partes dos elementos da
busca
 Eliminam a necessidade de se trabalhar
diretamente com SQL

Usando rawQuery()
database=db.getReadableDatabase();
constantsCursor = database.rawQuery("SELECT _ID, title, value
FROM constants ORDER BY title",null);
Usando o método query

É preciso passar vários parâmetros,
representando as partes da query







O nome da tabela
A lista das colunas a serem recuperadas
A cláusula WHERE (opcionalmente incluindo
parâmetros)
A lista dos valores para substituir os parâmetros
A cláusula GROUP BY
A cláusula HAVING
A cláusula ORDER BY
Usando o método query()
String[] columns={"ID", "inventory"};
String[] parms={"snicklefritz"};
Cursor result=db.query("widgets", columns, "name=?",
parms, null, null, null);
Manipulando cursores



Ao executar qualquer query (através dos dois métodos) recebese um cursor como resultado
Representa um apontador para os registros resultantes da
consulta
Com um cursor em mãos pode-se:
 Recuperar a quantidade de registros retornado, via
getCount()
 Iterar sobre as linhas, via moveToFirst(),moveToNext(), e
isAfterLast()
 Manipular os nomes e posição das colunas do resultado via
getColumnNames() e getColumnIndex()
 Reexecutar a query, via requery()
 Liberar os recursos via close()
Manipulando cursores
Cursor result=
db.rawQuery("SELECT ID, name, inventory FROM widgets", null);
while (!result.moveToNext()) {
int id=result.getInt(0);
String name=result.getString(1);
int inventory=result.getInt(2);
// Faz algo com os valores
}
result.close();
FIM
Download