Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca...

Preview:

Citation preview

Armazenamento de dados

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

Recommended