21
Armazenamento de dados

Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

Armazenamento de dados

Page 3: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

SQLITE DATABASES

Page 4: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

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

Page 5: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

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:

Page 6: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

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

Page 7: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

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

Page 8: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

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

Page 9: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

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);

}

}

Page 10: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

onUpgrade de sua classe Helper

@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS DICTIONARY"); onCreate(db); }

Page 11: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

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(); } }

Page 12: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

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

Page 13: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

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')"); } }

Page 14: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

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);

}

Page 15: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

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

Page 16: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

Usando rawQuery()

database=db.getReadableDatabase();

constantsCursor = database.rawQuery("SELECT _ID, title, value

FROM constants ORDER BY title",null);

Page 17: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

É 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

Page 18: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

Usando o método query()

String[] columns={"ID", "inventory"};

String[] parms={"snicklefritz"};

Cursor result=db.query("widgets", columns, "name=?",

parms, null, null, null);

Page 19: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

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

Page 20: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

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();

Page 21: Apresentação do PowerPointdiatinf.ifrn.edu.br/lib/exe/...sqlite.pdf · SQLite é uma biblioteca de software que implementa um engenho de Banco de Dados SQL (self-contained, serverless,

FIM