SQLite no Android
É comum em um aplicativo desenvolvido para android precisam persistir dados e o SQLite é a escolha natural para Banco de Dados em Aplicações Android.
Última atualização em: | 15422 Visualizações
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çãorawQuery
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 objetoContentValues
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 oID
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 oID
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.
Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.