Neste artigo será apresentada uma forma simples de realizar as operações de CRUD no sistema operacional móvel Android utilizando a linguagem Java, facilitando a manipulação de dados no banco de dados SQLite.

CRUD

CRUD (Create, Read, Update e Delete em Inglês) é uma sigla utilizada para se referir às quatro operações básicas realizadas em banco de dados relacionais que são consulta, inclusão, alteração e exclusão dos registros.

Criação do CRUD

Para facilitar as operações no banco de dados vamos criar uma classe chamada AcessoBD, essa classe terá os métodos Insert, Update, Delete e Select. Veja abaixo a declaração dos quatro métodos.

Insert

Este método será responsável pela inclusão dos registros no banco e terá como parâmetro o nome da tabela em que os registros serão incluídos e os valores que serão inseridos na base de dados.

public long Insert(String tabela, ContentValues values) {
	long linhasInseridas = 0;

	this.Open();
	try {
		Log.i(CNT_LOG, "Inserindo registro");

		linhasInseridas = db.insert(tabela, null, values);

	Log.i(CNT_LOG, "Linhas inseridas: " + String.valueOf(linhasInseridas));
	} finally {
		this.Close();
	}

	return linhasInseridas;
}
Listagem 1. Declaração do método Insert

Update

Este método será responsável pela alteração dos registros no banco de dados e terá como parâmetro o nome da tabela onde os registros serão alterados, os valores que serão alterados, o filtro (Where) dos registros e os argumentos.

public long Update(String tabela, ContentValues values, String where, String[] whereArgs) {
	long linhasAlteradas = 0;

	this.Open();
	try {
		Log.i(CNT_LOG, "Alterando registro(s)");

		linhasAlteradas = db.update(tabela, values, where, whereArgs);

	} finally {
		this.Close();
		Log.i(CNT_LOG, "Linha(s) alterada(s): " + String.valueOf(linhasAlteradas));
	}

	return linhasAlteradas;
}
Listagem 2. Declaração do método Update

Delete

Este método é responsável pela exclusão dos registros do banco de dados e terá como parâmetro o nome da tabela de onde os registros serão excluídos, o filtro (Where) dos registros e os argumentos.

public int Delete(String tabela, String where, String[] whereArgs) {
	int linhasExcluidas = 0;

	this.Open();
	try {
		Log.i(CNT_LOG, "Iniciando exclusão");

		this.Open();

		linhasExcluidas = db.delete(tabela, where, whereArgs);

		Log.i(CNT_LOG, "Registro excluído(s): " + String.valueOf(linhasExcluidas));
	} finally {
		this.Close();
	}

	return linhasExcluidas;
Listagem 3. Declaração do método Delete

Select

O método select é responsável pela consulta dos registros no banco de dados e terá como parâmetro o nome da tabela onde os registros serão buscados, as colunas que serão buscadas, o filtro (Where) dos registros, os argumentos, a ordenação o agregamento e o agrupamento.

public Cursor Select(String tabela, String campos[], String where, String[] whereArgs,
String groupBy, String having, String orderBy) {
	Cursor c = null;

	this.Open();
	try {
		Log.i(CNT_LOG, "Iniciando Busca");
		this.Open();

		c = db.query(tabela, campos, where, whereArgs, groupBy, having, orderBy);

		Log.i(CNT_LOG, "Busca realizada. Total de registros: " + c.getCount());
	} finally {
		this.Close();
	}

	return c;
}
Listagem 4. Declaração do método Select

Veja abaixo como ficou a declaração da classe.

package com.tarefas;

import java.util.ArrayList;

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

/**
 * Esta classe é responsavel pelas operações CRUD na base de dados
 * @author Fellipe
 *
 */
public class AcessoBD extends SQLiteOpenHelper {

private final String CNT_LOG = "AcessoBD";
	private ArrayList<String> createTable;
	private SQLiteDatabase db;

	public AcessoBD(Context context, String nomeBanco, ArrayList<String> sqlCriacaoBanco) {
		super(context, nomeBanco, null, 1);
		createTable = sqlCriacaoBanco;
	}



	private AcessoBD Open() {
		db = this.getWritableDatabase();
		return this;
	}

	private void Close() {
		if (db.isOpen()) {
			db.close();
		}
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		Log.i(CNT_LOG, "Iniciando a criação das tabelas");

		try {
			db.beginTransaction();

			for (int i = 0; i < createTable.size(); i++) {
				db.execSQL(createTable.get(i));
			}
			db.setTransactionSuccessful();
		} finally {
			db.endTransaction();
		}

		Log.i(CNT_LOG, "Tabelas criadas");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
	}

	public long Insert(String tabela, ContentValues values) {
		long linhasInseridas = 0;

		this.Open();
		try {
			Log.i(CNT_LOG, "Inserindo registro");

			linhasInseridas = db.insert(tabela, null, values);

			Log.i(CNT_LOG, "Linhas inseridas: " + String.valueOf(linhasInseridas));
		} finally {
			this.Close();
		}

		return linhasInseridas;
	}

	public long Update(String tabela, ContentValues values, String where, String[] whereArgs) {
		long linhasAlteradas = 0;

		this.Open();
		try {
			Log.i(CNT_LOG, "Alterando registro(s)");

			linhasAlteradas = db.update(tabela, values, where, whereArgs);

		} finally {
			this.Close();
			Log.i(CNT_LOG, "Linha(s) alterada(s): " + String.valueOf(linhasAlteradas));
		}

		return linhasAlteradas;
	}

	public int Delete(String tabela, String where, String[] whereArgs) {
		int linhasExcluidas = 0;

		this.Open();
		try {
			Log.i(CNT_LOG, "Iniciando exclusão");

			this.Open();

			linhasExcluidas = db.delete(tabela, where, whereArgs);

			Log.i(CNT_LOG, "Registro excluído(s): " + String.valueOf(linhasExcluidas));
		} finally {
			this.Close();
		}

		return linhasExcluidas;
	}

	public Cursor Select(String tabela, String campos[], String where, String[]
	whereArgs, String groupBy, String having, String orderBy) {
		Cursor c = null;

		this.Open();
		try {
			Log.i(CNT_LOG, "Iniciando Busca");
			this.Open();

			c = db.query(tabela, campos, where, whereArgs, groupBy, having, orderBy);

			Log.i(CNT_LOG, "Busca realizada. Total de registros: " + c.getCount());
		} finally {
			this.Close();
		}

		return c;
	}
}
Listagem 5. Declaração da classe de acesso ao banco de dados

Utilizando a classe

Utilizar a classe é bastante simples, vamos tomar como exemplo uma tabela chamada Tarefas com os campos _id (padrão do android), Titulo, Descricao e Data. Veja abaixo como efetuar as 4 operações no banco de dados.

Calendar calendar = Calendar.getInstance();
ContentValues values = new ContentValues();
values.put("Titulo", txtTitulo.getText().toString());
values.put("Descricao", txtDescricao.getText().toString());
values.put("data", dateFormat.format(calendar.getTime()));
Aplicacao.getBD().Insert("Tarefas", values);
Listagem 6. Utilizando o método Insert
Calendar calendar = Calendar.getInstance();
ContentValues values = new ContentValues();
values.put("Titulo", txtTitulo.getText().toString());
values.put("Descricao", txtDescricao.getText().toString());
values.put("data", dateFormat.format(calendar.getTime()));
Aplicacao.getBD().Update("Tarefas", values, "_id=?", new String[] {String.valueOf(this.id)});
Listagem 7. Utilizando o método Update
Aplicacao.getBD().Delete("Tarefas", "_id=?", new String[] {String.valueOf(info.id)});
Listagem 8. Utilizando o método Delete
Cursor cursor = Aplicacao.getBD().Select("Tarefas", new String[]
{"_id, Titulo, Descricao, Data"}, null, null, null, null, null);
Listagem 9. Utilizando o método Select

Conclusão

Neste artigo procurou-se demonstrar uma maneira simples de realizar as 4 operações básicas no banco de dados SQLite em um aplicativo para Android utilizando a linguagem Java.