apresentação do powerpointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · sqlite é uma biblioteca...
TRANSCRIPT
Armazenamento de dados
Shared Preferences
Mecanismo simples de armazenar pares de chave-
valor
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.)
Opções de Armazenamento
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 Databases
SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless, zero-configuration, transactional)
Engenho de banco de dados mais “deployed” do mundo
Código fonte de domínio público
Patrocinado por:
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()
SQLite no Android
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);
}
}
SQLiteOpenHelper
(Context context, String name, SQLiteDatabase.CursorFactory
factory, int version)
Contexto do componente
Nome do banco de dados
Fábrica de cursor
Versão do BD
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(); } }
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
Como manipular dados no BD
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);
}
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
Buscando dados no BD
Usando rawQuery()
database=db.getReadableDatabase();
constantsCursor = database.rawQuery("SELECT _ID, title, value
FROM constants ORDER BY title",null);
É 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
Usando o método query()
String[] columns={"ID", "inventory"};
String[] parms={"snicklefritz"};
Cursor result=db.query("widgets", columns, "name=?",
parms, null, null, null);
Ao executar qualquer query (através dos dois métodos) recebe-
se 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
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