SQLite no Android

Postado em por Wolmir Cezer Garbin em Android | 127 Visualizações
Última atualização em:

É comum em um aplicativo desenvolvido para android precisam persistir dados e o SQLite é a escolha natural para Banco de Dados em Aplicações Android.

SQLite no Android

Neste post será mostrado como é fácil utilizar o SQLite para manter dados no dispositivo e recuperar quando necessário usando a própria API do Android.

Sobre o SQLite

Algumas características tornam o SQLite uma escolha natural para Android, como, ser leve, compacto, não precisar de instalação, fácil de utilizar e acima de tudo eficiente no armazenamento de dados.

O SQLite está incluso nativamente no Android, ou seja, não é necessário adicionar nenhuma api extra para utilizar o SQLite em seu aplicativo.

Como usar o SQLite no Android

Em seu aplicativo, basta criar uma classe que herda algumas funcionalidades da classe SQLiteOpenHelper. Abaixo segue a base da classe para criar o banco de dados em seu aplicativo.

Classe DatabaseHelper.java

public class DatabaseHelper extends SQLiteOpenHelper {
  private static final int DATABASE_VERSION = 2; 
  private static final String DATABASE_NAME = "bancoApp";
  DatabaseHelper (Context context) {
       super(context, DATABASE_NAME, null, DATABASE_VERSION);
   }
}

O construtor da classe cria o banco com o nome (DATABASE_NAME) e a versão (DATABASE_VERSION) do banco de dados. Por padrão, o banco será criado no seguinte caminho: //data/data//databases/

Pode ser interessante criá-lo no armazenamento externo para termos uma maior acessibilidade, nos casos em que isso pode ser realizado, se precisar de segurança para seus dados não recomendamos este procedimento. Neste caso, precisa ser alterada a chamada para a seguinte:

super(context, Environment.getExternalStorageDirectory().getAbsolutePath()
+ "/nome-da-aplicacao/database/" + DATABASE_NAME, null, DATABASE_VERSION);

Após estender a classe SQLiteOpenHelper e criar o banco de dados no método construtor, é necessário criar as tabelas do seu banco de dados. Para isso sobrescreva o método onCreate da classe pai e nele adicione a criação das tabelas conforme segue:

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE PESSOA ( ID NUMBER, NOME TEXT, VALOR TEXT);");
}

É necessário também sobrescrever o método onUpgrade. Este método é chamado automaticamente quando detectado um incremento no número de versão do banco de dados. Nele podemos efetuar qualquer operação, como eliminar ou alterar alguma tabela. O método é executado dentro de uma transação, então se uma exceção for lançada, um rollback é executado. O funcionamento do método é o mesmo do onCreate.

Uma solução mais elegante

Pode ainda utilizar a pasta assets para criar arquivos de atualização de banco de dados, criando uma lógica para ler os arquivos e executar separadamente cada script. Abaixo é mostrado um método que pode ser utilizado tanto no onCreate como no onUpgrade, facilitando a manutenção do seu banco de dados.

@Override
public void onCreate(SQLiteDatabase db) {
    createTables( db );
}

private void createTables(SQLiteDatabase db) {
	AssetManager manager = context.getAssets();
 
	InputStream inputStream = null;
	BufferedReader reader = null;
 
	try {
		inputStream = manager.open(DatabaseConstants.FOLDER_DATABASE_ASSETS +
                       File.separator + DatabaseConstants.FILE_SCRIPT_DATABASE);
 
		reader = new BufferedReader(new InputStreamReader(inputStream));
 
		StringBuilder stringBuilder = new StringBuilder();
 
		String line = null;
		while ((line = reader.readLine()) != null) {
			stringBuilder.append(line);
		}
 
		String[] sqls = stringBuilder.toString().split(";");
 
		for (String sql : sqls) {
			db.execSQL(sql);
		}
 
	} catch (IOException e) {
		throw e;
	} finally {
	try {
			if (inputStream != null) {
				inputStream.close();
			}
 
			if (reader != null) {
				reader.close();
			}
		} catch (IOException e) {
			throw e;
		}
	}
}

Principais operações do SQLite no Android


O gerenciamento do banco e a execução de queries é feita a partir da classeSQLiteDatabase sendo relativamente simples.

Select SQLite Android

Existem algumas formas de executar select no Banco de Dados SQLite no Android, a que será apresentada é apenas a maneira que consideramos mais simples, e no exemplo retorna uma lista do objeto pessoa, para isso é realizada a conversão:

public List<Pessoa> getAllContacts() {
	List lsPessoa<Pessoa> = new ArrayList<Pessoa>();
 
	SQLiteDatabase db = this.getWritableDatabase();
	Cursor cursor = db.rawQuery("SELECT  * FROM PESSOA", null);
 
	if (cursor.moveToFirst()) {
		do {
			Pessoa pessoa = new Pessoa();
			pessoa.setID(Integer.parseInt(cursor.getString(0)));
			pessoa.setName(cursor.getString(1));
			pessoa.setPhoneNumber(cursor.getString(2));

			lsPessoa.add(pessoa);
		} while (cursor.moveToNext());
	}
 
	return lsPessoa;
}

No exemplo é utilizado a linguagem SQL sem passar nenhum parametro, sendo que serão retornados todos os dados existentes na tabela PESSOA logo após é percorrido o cursor que é retornado pela função rawQuery e convertido para uma lista de pessoas. Ficou com dúvida, poste nos comentários!

Insert SQLite Android

O insert é relativamente mais simples, não sendo necessário criar uma sentença SQL, basta utilizar alguns facilitadores que o Android nós fornece, veja:

public void insert(Pessoa pessoa) {
    SQLiteDatabase db = this.getWritableDatabase();
 
    ContentValues values = new ContentValues();
    values.put("NOME", pessoa.getNome());
    values.put("VALUE", pessoa.getValue());
 
    db.insert("PESSOA", null, values);
    db.close();
}

Note que utilizamos o método getWritableDatabase(), isso para que seja possível escrever em nosso banco de dados, logo na sequência criamos um objeto ContentValues com chave e valor, onde a chave é o nome da Coluna e o valor será o valor a ser gravado.

Update SQLite Android

Da mesma forma que o insert, o update é fácil e simples de ser executado, o importante é sempre informar o where da sentença, no código de exemplo é usado o ID, veja:

public int update(Pessoa pessoa) {
    SQLiteDatabase db = this.getWritableDatabase();
 
    ContentValues values = new ContentValues();
    values.put("NOME", pessoa.getNome());
    values.put("VALUE", pessoa.getValue());
 
    return db.update("PESSOA", values, "ID = ?", new String[] { String.valueOf(pessoa.getId()) });
}

Note que em relação ao insert temos apenas a alteração que passamos como parâmetro o ID da pessoa que queremos atualizar, dessa forma o update não afetará outras pessoas que não sejam a que realmente queremos alterar.

Delete SQLite Android

Da mesma forma que o update se deseja remover apenas um registro informe o where da sentença da seguinte forma.

public void delete(Pessoa pessoa) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete("PESSOA", "ID = ?", new String[] { String.valueOf(pessoa.getId()) });
    db.close();
}

Note que o delete em SQLite no Android é muito simples, bastando informar o ID e pronto.

É muito fácil trabalhar com banco de dados no Android, basta tomar alguns cuidados referentes a atualização e entender como funciona o processo como um todo.

Se ficou alguma dúvida, posta nos comentários.

Wolmir Cezer Garbin

Wolmir Cezer Garbin


Sou formado em Desenvolvimento de Sistemas para Internet pela faculdade Mater Dei e Pós graduado em Desenvolvimento de sistemas em Java pela UTFPR. Trabalho a mais de 9 anos com desenvolvimento em Java, Android e Web utilizando as principais tecnologias do mercado. Atuo como professor na faculdade Mater Dei, programador na Garbo Software e criador do Receitas de Código.

Ver mais

Posts relacionados


Code Conference

Esta é uma conferência de código realizada na cidade de Pato Branco para dissiminar tendências e informações sobre programação e novas tecnológias

Veja mais sobre o Code Conference

Publique seu post no Receitas de Código

Agora você pode publicar seu post no Receitas de Código e compartilhar seu conhecimento com muitas pessoas!

Quero publicar