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

Por que usar um cursor ao invés de um count(*) ao pesquisar o telefone?

Boa tarde!

Algum motivo para não podermos usar um count(*) ao invés de um cursor na query que pesquisa o telefone na tabela de alunos?

Att,

WB::

1 resposta
solução!

Oi Wilson, acredito que não tem problema algum! Entretanto, precisará executar alguns passos a mais, vamos pegar o exemplo feito no curso:

    public boolean ehAluno(String telefone) {
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery("SELECT * FROM Alunos WHERE telefone = ?", new String[]{telefone});
        int resultados = c.getCount();
        c.close();
        return resultados > 0;
    }

Veja que nesse instante apenas fazemos um getCount, pois nem sempre teremos um retorno! Se fosse passar isso para o COUNT seria:

    public boolean ehAluno(String telefone) {
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery("SELECT COUNT(*) FROM Alunos WHERE telefone = ?", new String[]{telefone});
        c.moveToFirst();
        int resultados = c.getInt(0);
        c.close();
        return resultados > 0;
    }

Veja que será necessário usar o método moveToFirst() e depois o getInt() com parâmetro 0. Se caso tentar usar o getCount() direto da mesma forma como o que temos sem o COUNT, ele sempre vai retornar 1, pois o COUNT sempre dará um retorno para o Cursor, é por isso que é necessário o moveToFirst() e depois pegar a primeira coluna com valor int, pois essa primeira linha é justamente o valor do COUNT.

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