Tutorial: Utilização do sqlite no Android (Parte I) Date : 7 de Abril de 2012 Por Mário Baltazar para o Pplware Tutorial realizado no âmbito do Mestrado em Computação Móvel do Instituto Politécnico da Guarda na Unidade Curricular de Seminário A plataforma Android foi introduzida no mercado pela Google em 2007 e é composta por um sistema operativo embebido e um conjunto de aplicações que integram com a plataforma. Além das várias inovações implementadas, o Android traz também suporte nativo para o SQLite. O SQLite é uma pequena biblioteca, desenvolvida em linguagem C, que implementa um amplo subconjunto do standard SQL 92, sendo a sua reputação proveniente da combinação do motor de base de dados com a interface dentro de uma única biblioteca. As aplicações que usam SQLite podem ter assim acesso a uma base de dados racional SQL, sem a necessidade de correrem processos RDBMS (relational database management system) em separado e sem grandes overheads. O SQLite foi desenvolvido em 2000 e é actualmente uma base de dados amplamente adoptada em dispositivos móveis, suportando até 2 TB de dados. Este artigo será dividido em duas partes e hoje vamos começar por ensinar como criar uma pequena aplicação para registo de contactos, sendo esses contactos guardados na base dados sqlite. http://www.pplware.com Pplware 1 / 6
Vamos então começar com o desenvolvimento da aplicação, usando para isso a ferramenta de desenvolvimento eclipse. 1 Criar Projecto Criação de um novo projecto no Eclipse com o nome: Contactos File > New > Other > Android/Android Project http://www.pplware.com Pplware 2 / 6
2 Criar uma nova classe com nome DbHelper Esta classe será responsável por criar a base de dados no momento em que a aplicação é instalada (método oncreate) e actualizá-la para novas versões(método onupgrade). 2.1 - A classe DB expande a classe SQLiteOpenHelper, esta fornece os métodos getreadabledatabase() e getwriteabledatabase(), que permitem aceder à base dados SQLiteDatabase quer para ler quer para escrever. public class DbHelper extends SQLiteOpenHelper { } 2.2 - Adicionar os imports necessários para a classe: import android.content.context; import android.database.sqlite.sqli tedatabase; import android.database.sqlite.sqliteopenhelper; import android.util.log; 2.3 - Adicionar as constantes necessárias: private static final int DATABASE_VERSION = 1; public static final St ring ID = "_id"; public static final String NOME = "nome"; public st atic final String EMAIL = "email"; public static final String TELEFON E = "telefone"; public static final String FOTO = "foto"; private st atic final String DATABASE_CREATE = "create table " + TABLE_NAME + "( " + ID + " integer primary key autoincrement, " + NOME + " text not null, " + EMAIL + " text not null, " + TELEFONE+" text not null" + ", "+ FOTO +" BLOB);"; 2.4 - Fazer @override das classes necessárias: @Override public void oncreate(sqlitedatabase db) { db.execsql(database_create); } @Override public void onupgrade(sql itedatabase db, int oldversion, int newversion) { Log.w(Db Helper.class.getName(), "Upgrading database from version " + oldversio n + " to " + newversion + ", which will destroy all old data"); db.execsql("drop TABLE IF EXISTS " + TABLE_NAME); oncreate(d b); } http://www.pplware.com Pplware 3 / 6
2.5 - No final a classe terá um aspecto parecido com o seguinte: public class DbHelper extends SQLiteOpenHelper { private st atic final String DATABASE_NAME = "contactos4.db"; public s tatic final String TABLE_NAME = "contactos2"; private stati c final int DATABASE_VERSION = 1; public static final Strin g ID = "_id"; public static final String NOME = "nome"; public static final String EMAIL = "email"; public static final String TELEFONE = "telefone"; public static fi nal String FOTO = "foto"; private static final String DATAB ASE_CREATE = "create table " + TABLE_NAME + "( " + ID + " integer pr imary key autoincrement, " + NOME + " text not null, " + EMAIL + " te xt not null, " + TELEFONE+" text not null" + ", "+ FOTO +" BLOB);"; public DbHelper(Context context) { super( context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void oncreate(sqlitedatabase db) { db.execsql(database_create); } @Override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { Log.w(DbHelper.class.getName(), "Upgrading database from version " + oldversion + " to " + newversion + ", which will destroy all old data"); db.execsql("drop TABLE IF EXISTS " + TABLE_NAME); oncreate(db); } } 4- Criar nova classe DBAdapter que será a classe base para trabalhar com SQLite. Esta irá permitir abrir, fechar, fazer queries e actualizar a base de dados. 4.1 - Criar nova classe DBAdapter public class DBAdapter { } 4.2 - Adicionar os imports necessários para a aplicação: import java.io.bytearrayoutputstream; import java.util.arraylist; im port java.util.list; import android.content.contentvalues; import an droid.content.context; import android.database.cursor; import androi d.database.sqlexception; import android.database.sqlite.sqlitedatabas e; import android.graphics.bitmap; import android.graphics.bitmapfac tory; 4.3 - Adicionar os Atributos necessários para a classe: http://www.pplware.com Pplware 4 / 6
private SQLiteDatabase database; private DbHelper dbhelper; privat e String[] allcolumns = { DbHelper.ID, DbHelper.NOME, DbHelper.EMAIL, DbHelper.TELEFONE, DbHelper.FOTO}; 4.4 - Declarar construtor da classe que irá inicializar uma instância da classe DbHelper. public DBAdapter(Context context) { er(context); } dbhelper = new DbHelp Um Context é um handle para o sistema, que fornece serviços como resources, acesso a base de dados e preferências. O contexto da aplicação (application context) é o repositório central para a funcionalidade de todas as aplicações de nível superior no Android. Usa-se este contexto quando queremos aceder a configurações e recursos compartilhados entre as várias janelas (activities) da aplicação. 4.5 - Criar método para criar um novo contacto na base de dados, este irá retornar um objecto Contacto. public Contacto createcontacto(string nome, String email, String tel efone, Bitmap foto) { ContentValues values = new Content Values(); values.put(db.nome, nome); value s.put(db.email,email); values.put(db.telefone,telefone); ByteArrayOutputStream baos = new ByteArrayOutputStream( ); foto.compress(bitmap.compressformat.png, 100, baos); byte[] photo = baos.tobytearray(); values. put(db.foto, photo); long insertid = database.insert(db. TABLE_NAME, null, values); // To show how to query Cursor cursor = database.query(db.table_name, allcolumns, DB.ID + " = " + insertid, null,null, null, null); cursor.movetofirst(); return cursortocontacto(cursor); } Os cursores são apontadores de dados da base de dados ou seja, uma interface que permite o acesso aos dados retornados pela query. O objecto ContentValues permite definir os valores a inserir. 4.6 - Método para eliminar um contacto: public void EliminaContacto (int idcontacto){ databa se.delete(dbhelper.table_name, DbHelper.ID + " = " + idcontacto, http://www.pplware.com Pplware 5 / 6
Powered by TCPDF (www.tcpdf.org) null); } 4.7 - Método para devolver um Contacto passando como parâmetro um cursor. private Contacto cursortocontacto(cursor cursor) { by te[] blob = cursor.getblob(cursor.getcolumnindex(db.foto)); Bitmap bmp = BitmapFactory.decodeByteArray(blob, 0, blob.length); Contacto contacto = new Contacto(cursor.getLong(0),cursor.getString(1),cursor.getString(2), cu rsor.getstring(3),bmp); return contacto; } 4.8 - Método para devolver todos os contactos da tabela: public Cursor getcontactos(){ Cursor cursor = database.rawquery("select _id, nome,telefone,foto from contactos 2", null); return cursor; } 4.9 - Método que devolve o contacto passando como parâmetro o id do contacto pretendido: public Contacto getcontacto (int idcontacto){ Cursor cu rsor = database.query(db.table_name, allcolumns, DB.ID + " = " + idcontacto, null,null, null, null); cursor.moveto First(); return cursortocontacto(cursor); } Terminamos agora a criação das classes auxiliares para trabalhar com a base de dados, no próximo tutorial iremos criar os layouts e utilizar estas classes para guardar os dados na base de dados. http://www.pplware.com Pplware 6 / 6