Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Leia tambm
Usando bancos de dados
Salvar dados em um banco de dados ideal para dados que se repetem ou estruturados,
como informaes de contato. Esta lio assume que voc esteja familiarizado com
bancos de dados do SQL em gera, e o ajuda a comear a trabalhar com bancos de dados
do SQLite no Android. As APIs necessrias para usar um banco de dados no Android esto
disponveis no pacote android.database.sqlite
(https://developer.android.com/reference/android/database/sqlite/package-summary.html).
de como o banco de dados organizado. O esquema refletido nas declaraes SQL usadas na criao
do banco de dados. aconselhvel criar uma classe de acompanhamento, conhecida como classe de
contrato, que especifica claramente o layout do esquema de forma sistemtica e autodocumentada.
Uma classe de contrato o continer das constantes que definem nomes para URIs, tabelas e colunas.
A classe de contrato permite usar as mesmas constantes em outras classes no mesmo pacote. Permite
que voc altere o nome da coluna em um local e que a mudana se propague pelos seus cdigos.
Uma boa forma de organizar uma classe de contrato colocar definies que sejam globais para todo o
banco de dados no nvel raiz da classe. Crie uma classe interna para cada tabela que enumera suas
colunas.
(https://developer.android.com/reference/android/provider/BaseColumns.html),
herdar um campo-chave primrio chamado _ID que algumas classes do Android, como adaptadores
de cursor, esperam que voc tenha. No uma obrigatrio, mas pode ajudar para um trabalho mais
harmonioso com o banco de dados no framework do Android.
Por exemplo, este trecho define o nome da tabela e das colunas para uma nica tabela:
public final class FeedReaderContract {
// To prevent someone from accidentally instantiating the contract class,
// give it an empty constructor.
public FeedReaderContract() {}
(https://developer.android.com/guide/topics/data/data-storage.html#filesInternal)
seu banco de dados no espao privado do disco associado ao aplicativo. Seus dados esto protegidos
porque, por padro, essa rea no pode ser acessada por outros aplicativos.
Um conjunto de APIs est disponvel na classe SQLiteOpenHelper
(https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html).
para obter referncias para seu banco de dados, o sistema realiza operaes de possvel longa
execuo para criar e atualizar o banco de dados apenas quando necessrio e no durante a
inicializao do aplicativo. Basta chamar getWritableDatabase()
(https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#getWritableDatabase())
getReadableDatabase()
ou
(https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#getReadableDatabase()).
(https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#getWritableDatabase())
ou getReadableDatabase()
(https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#getReadableDatabase())
(https://developer.android.com/reference/android/os/AsyncTask.html)
ou IntentService
(https://developer.android.com/reference/android/app/IntentService.html).
(https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html),
(https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#onCreate
(android.database.sqlite.SQLiteDatabase)),
onUpgrade()
(https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#onUpgrade
(android.database.sqlite.SQLiteDatabase, int, int))
e onOpen()
(https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#onOpen
(android.database.sqlite.SQLiteDatabase)).
(https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#onDowngrade
(android.database.sqlite.SQLiteDatabase, int, int)),
mas no obrigatrio.
(https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html)
(https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insert(java.lang.String,
java.lang.String, android.content.ContentValues)).
FeedEntry.TABLE_NAME,
FeedEntry.COLUMN_NAME_NULLABLE,
values);
(https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insert(java.lang.String,
java.lang.String, android.content.ContentValues))
o nome de uma coluna em que o framework pode inserir NULL caso o ContentValues
(https://developer.android.com/reference/android/content/ContentValues.html)
(https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#query(boolean,
(https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insert(java.lang.String,
java.lang.String, android.content.ContentValues))
e update()
(https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#update(java.lang.String,
android.content.ContentValues, java.lang.String, java.lang.String[])),
(https://developer.android.com/reference/android/database/Cursor.html).
SQLiteDatabase db = mDbHelper.getReadableDatabase();
// Define a projection that specifies which columns from the database
// you will actually use after this query.
String[] projection = {
FeedEntry._ID,
FeedEntry.COLUMN_NAME_TITLE,
FeedEntry.COLUMN_NAME_UPDATED,
...
};
// How you want the results sorted in the resulting Cursor
String sortOrder =
FeedEntry.COLUMN_NAME_UPDATED + " DESC";
Cursor c = db.query(
FeedEntry.TABLE_NAME,
projection,
selection,
selectionArgs,
null,
null,
sortOrder
);
//
//
//
//
Para ver uma linha no cursor, utilize um dos mtodos de movimento Cursor
(https://developer.android.com/reference/android/database/Cursor.html),
leitura na primeira entrada nos resultados. Para cada linha, voc pode ler um valor de coluna chamando
um dos mtodos GET Cursor
(https://developer.android.com/reference/android/database/Cursor.html),
como
mtodos GET, voc deve transmitir a posio de ndice da coluna desejada, que pode ser obtida
chamando getColumnIndex()
(https://developer.android.com/reference/android/database/Cursor.html#getColumnIndex(java.lang.String))
getColumnIndexOrThrow()
ou
(https://developer.android.com/reference/android/database/Cursor.html#getColumnIndexOrThrow(java.lang.String)).
Por exemplo:
cursor.moveToFirst();
long itemId = cursor.getLong(
cursor.getColumnIndexOrThrow(FeedEntry._ID)
);
para testes comparativos que so dependentes dentro de uma clusula. Como o resultado no tratado
da mesma forma que uma declarao SQL comum, ele fica imune injeo de SQL.
// Define 'where' part of query.
String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";
// Specify arguments in placeholder order.
String[] selectionArgs = { String.valueOf(rowId) };
// Issue SQL statement.
db.delete(table_name, selection, selectionArgs);
(https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insert(java.lang.String,
java.lang.String, android.content.ContentValues))
(https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#delete(java.lang.String,
java.lang.String, java.lang.String[])).
SQLiteDatabase db = mDbHelper.getReadableDatabase();
// New value for one column
ContentValues values = new ContentValues();
values.put(FeedEntry.COLUMN_NAME_TITLE, title);
// Which row to update, based on the ID
String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";
String[] selectionArgs = { String.valueOf(rowId) };
int count = db.update(
FeedReaderDbHelper.FeedEntry.TABLE_NAME,
values,
selection,
selectionArgs);