SQLite em Android

O SQLite é um sistema de gestão de bases de dados autónomo, que funciona de forma diferente dos sistemas cliente-servidor. Em SQLite não existe um servidor que execute queries a pedido dos clientes. No SQLite, a aplicação cliente é responsável por criar a base de dados (BD) caso ela não exista, atualizá-la se a versão instalada da BD for mais antiga que a atual usada pela aplicação e, também manipular os dados.

Portanto, contrariamente aos sistemas cliente-servidor usuais como o MySQL, o Oracle, o SQL Server, etc., a aplicação Android que use SQLite tem que incluir o código SQL de manipulação da estrutura da BD, assim como o código de manipulação dos dados.

Este artigo apresenta um exemplo de uma BD simples com uma única tabela para armazenar livros (autor e título). Segue-se a classe DBAdapter que é usada pela Activity definida mais adiante.

package se.bd;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBAdapter
{
private static final String DATABASE_NAME = “Livros”;
private static final int DATABASE_VERSION = 1;

private static final String TABELA_LIVRO =
“CREATE TABLE livro (”
+ “_id INTEGER PRIMARY KEY AUTOINCREMENT, ”
+ “liv_titulo VARCHAR(128), ”
+ “liv_autor VARCHAR(128)”
+ “)”;

private final Context context;

private DatabaseHelper DBHelper;
private SQLiteDatabase db;

public DBAdapter(Context ctx)
{
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(TABELA_LIVRO);
}

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

//—abre a ligação à BD—
public DBAdapter open() throws SQLException
{
db = DBHelper.getWritableDatabase();
return this;
}

//—fecha a ligação à BD—
public void close()
{
DBHelper.close();
}

//—insere um livro na BD—
public long insereLivro(String titulo, String autor)
{
ContentValues registo = new ContentValues();
registo.put(“liv_titulo”, titulo);
registo.put(“liv_autor”, autor);
return db.insert(“livro”, null, registo);
}

//—consulta todos os livros—
public Cursor getAllLivros() throws SQLException
{
return db.query(true,
“livro”,
new String[] {“_id”,”liv_titulo”,”liv_autor”},
null,
null,
null,
null,
null,
null);
}
}

Segue-se o código da Activity que gere a BD e a interface XML criada mais abaixo.

package se.bd;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class BD extends Activity {
Button inserir, consultar;
EditText titulo, autor;
DBAdapter bd;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

inserir = (Button)findViewById(R.id.inserir);
consultar = (Button)findViewById(R.id.consultar);
titulo = (EditText)findViewById(R.id.titulo);
autor = (EditText)findViewById(R.id.autor);

bd = new DBAdapter(this);
bd.open();

inserir.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String sTitulo = titulo.getText().toString();
String sAutor = autor.getText().toString();
bd.insereLivro(sTitulo, sAutor);
titulo.setText(“”);
autor.setText(“”);
}
});

consultar.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mostraLivros();
}
});
}

public void mostraLivros() {
Cursor c = bd.getAllLivros();
if(c.moveToFirst()) {
do {
int id = c.getInt(0);
String sTitulo = c.getString(1);
String sAutor = c.getString(2);
String msg = String.format(“%d, %s, %s”, id, sTitulo, sAutor);
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
}while(c.moveToNext());
}
c.close();
}

public void onDestroy() {
super.onDestroy();
bd.close();
}
}

O layout gráfico da aplicação é dados pelo ficheiro XML seguinte:

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:orientation=”vertical” ><TextView
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Título”
android:textSize=”20sp”
/>
<EditText
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:id=”@+id/titulo”
android:inputType=”text”
android:textSize=”20sp”
/>
<TextView
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Autor”
android:textSize=”20sp”
/>
<EditText
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:id=”@+id/autor”
android:inputType=”text”
android:textSize=”20sp”
/>
<Button
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:id=”@+id/inserir”
android:text=”Inserir”
android:textSize=”20sp”
/>
<Button
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:id=”@+id/consultar”
android:text=”Consultar”
android:textSize=”20sp”
/></LinearLayout>

A aplicação tem duas caixas de texto (EditText) para o utilizador colocar o título do livro e nome do autor. Tem também dois botões: um para inserir um novo livro e o outro para consultar os livros já armazenados.

Segue-se uma imagem do layout da aplicação.

device-2013-04-03-030339

Deixar uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *