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.