sábado, 2 de outubro de 2010

SQLite no Android

Agora que já falei sobre o SQLite, vamos colocá-lo no contexto do Android.
O SQLite já faz parte do Android por definição, então já está disponível para qualquer desenvolvimento.
É possível inclusive acessar o arquivo .db a partir do emulador da SDK do Android, modificando o mesmo com qualquer programa que leia este tipo de arquivo, até com a extensão do firefox que comentei no outro artigo.
Para encontrar este arquivo, utilizando o eclipse, altere para a perspective Dalvik Debug Monitor Server (DDMS) e navegar para Data > Data > [Aplicação] > DataBases > [nome da Base], conforme print:


É muito prático trabalhar diretamente com a base, que pode ser transferida diretamente para o emulador depois de alterada.

Agora, seguindo na implementação do Android, a API oferece uma classe chamada SQLiteOpenHelper, que deve ser extendida e representa uma base de dados SQLite. No construtor é informado o nome da base sendo criada e a versão atual (que deve ser incrementada quando o app for atualizado), além de uma customização do cursor utilizado pelo banco (caso você tenha implementado uma).


public class DataBaseHelper extends SQLiteOpenHelper {


public DataBaseHelper(Context context) { 
super(context, DATABASE_NAME, null, 1);
}
}


Outros métodos importantes são o onCreate e o onUpgrade, que contém respectivamente os scripts de criação e de atualização da estrutura do banco.


//Executa as rotinas de criação das tabelas do banco
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE A");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//Executar scripts que devem ser rodados quando o banco sofre alteração numa atualização

}

Quando esta classe estiver implementada o banco já poderá ser utilizado. Utilizando o trecho abaixo é possível criar um objeto do tipo SQLiteDatabase, que oferece acesso às tabelas, oferecendo métodos para realizar CRUD.

SQLiteDatabase db = new DataBaseHelper(context).getReadableDatabase();        
db.rawQuery("SELECT * FROM TABLE", null); 

As consultas retornam cursores, que provavelmente não são novidade para quem já mexeu com outras bases de dados.

No contexto do lhama, os meus progressos foram:
-Adaptar a base de dados para o SQLite
-Preparar uma carga de exemplo para testes
-Integrar as consultas com as Views do Android para que os dados sejam manipulados.

A última parte consumiu a maior parte do meu tempo, especialmente na integração dos cursores do banco de dados com a ExpandableList do Android. O print abaixo já mostra a lista com dados carregados a partir do banco, já atualizando as presenças das aulas cadastradas quando o checkbox é alterado. Foi desenvolvido numa aplicação a parte para focar o meu trabalho nesta atividade.



Um comentário:

  1. Me parece que vocês estão indo para um lado diferente da idéia original.
    Isso vai complicar mais ainda o projeto pois vai exigir sincronização de dados.

    ResponderExcluir