Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

método close do DAO

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?

1 resposta
solução!

Oi Rafael, tudo bem ?

Acabamos fechando fora, porque em alguns casos nós depois de fazermos alguma ação, por exemplo add um novo item e já queremos atualizar a tela, como se fosse um master/detail.

A sua sacada aí também é uma boa e funciona !

Abraços

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software