Bom dia. Minha dúvida é a seguinte: Temos o objeto AlunoDAO, que faz a tratativa com o banco de dados SQL. Sempre temos que nos lembrar de "fechar" a comunicação com o banco de dados, para liberar memória para o android.
Pensando nisso, ao modelar o objeto DAO, nós já poderíamos fechar o banco, quando executamos alguma função relacionado ao mesmo? EX:
public void insertAluno(Aluno aluno) {
//Recebe uma instância de um banco de dados para a inserção no banco
SQLiteDatabase writableDatabase = getWritableDatabase();
//Pacote que irá passar para o banco de dados os valores coletados
ContentValues dataDatabase = new ContentValues();
dataDatabase.put("nome",aluno.getNome());
dataDatabase.put("endereco",aluno.getEndereco());
dataDatabase.put("telefone",aluno.getTelefone());
dataDatabase.put("site",aluno.getSite());
dataDatabase.put("nota",aluno.getNota());
//Inserção na tabela do banco de dados
writableDatabase.insert(Constantes.DATABASE_TABLE_NAME,null,dataDatabase);
writableDatabase.close();
}
public List<Aluno> getAllAlunos() {
//Lista de alunos a ser devolvida
List<Aluno> alunos = new ArrayList<Aluno>();
//Recebe uma instância do banco de dados para executar a leitura do mesmo
SQLiteDatabase readableDatabase = getReadableDatabase();
//Executa o comando de busca no banco de dados
Cursor cursor = readableDatabase.rawQuery(Constantes.DATABASE_CMD_GET_ALL_ALUNOS, null);
//Coleta de dados enquanto existir dados
while (cursor.moveToNext()){
Aluno aluno = new Aluno();
aluno.setId(cursor.getLong(cursor.getColumnIndex("id")));
aluno.setNome(cursor.getString(cursor.getColumnIndex("nome")));
aluno.setEndereco(cursor.getString(cursor.getColumnIndex("endereco")));
aluno.setTelefone(cursor.getString(cursor.getColumnIndex("telefone")));
aluno.setSite(cursor.getString(cursor.getColumnIndex("site")));
aluno.setNota(cursor.getDouble(cursor.getColumnIndex("nota")));
//Adiciona aluno na lista de aluno
alunos.add(aluno);
}
readableDatabase.close();
cursor.close();
return alunos;
}
public void deleteAtID(long id) {
SQLiteDatabase writableDatabase = getWritableDatabase();
String[] parameters = {String.valueOf(id)};
writableDatabase.delete(Constantes.DATABASE_TABLE_NAME,"id = ?",parameters);
writableDatabase.close();
}
Existe diferença de fechar o banco dentro do modelo DAO, ou não? Porque nos exemplos, estamos fechando o banco sempre depois da chamada de alguma função relacionada ao DAO, em uma activity. Mas fechar o banco, não deveria ser uma característica do DAO?