Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

erro ao converter valores depois de um select

Estou tentando fazer isso:

    public double buscaMediaVlTotal() {
        String query = "select AVG(c.vl_total) from Cliente c where c.vl_total >= 300 and c.id_customer between 15 and 200 ";

        double singleResult = (double) em.createQuery(query).getSingleResult();
        return singleResult;
    }

a inserção desse valor esta senfo feita assim:

System.out.println("Saldo R$:");
            String valor = scan.nextLine();
            double valor2 = Double.parseDouble(valor);
            cliente.setVl_total(valor2);

no main do meu teste eu chamo ele assim:

double buscaMediaVlTotal = dao.buscaMediaVlTotal();
        DecimalFormat df = new DecimalFormat("0.##");
        String valorFotmatado = df.format(buscaMediaVlTotal);
        System.out.println("[[Medforia do Valor Total]: --->" + valorFotmatado + "]\n");

só que não funciona, estou recebendo um :

mai 05, 2017 10:09:37 AM org.hibernate.hql.internal.QueryTranslatorFactoryInitiator initiateService
INFO: HHH000397: Using ASTQueryTranslatorFactory
Exception in thread "main" java.lang.NullPointerException
    at br.com.testeback2017.dao.ClienteDao.buscaMediaVlTotal(ClienteDao.java:25)
    at br.com.testeback2017.main.Processa.main(Processa.java:58)

mesmo usando o debug n estou conseguindo achar um por que desse erro

7 respostas

alguem ?

solução!

Bom dia,

O erro é porque tem alguma coisa nula na linha 25 da classe ClienteDao, e essa linha é dentro do método buscaMediaVlTotal(). Qual é a linha 25?

Pode ser o seu entityManager que está nulo por exemplo. Se não for ele, o getSingleResult() retorna nulo quando a query não retorna valor nenhum, ou seja, a execução sua query não está achando nenhum registro no banco de dados para fazer o average.

Abraço.

linha 25 ta em branco, é a linha que vem depois da minha string query

Você já executou esta query direto no banco em SQL puro para ver se retorna resultado mesmo?

eu tinha feito um drop pra limpar meus registros no banco, e tinha esquecido que a query retorna so a patir de 15 pra frente, então sim a query estava retornando null. engraçado que no debugg eu n consegui pegar isso, vai ver usei errado ! kkkk

Matou então, abraço.

Note que é interessante, quando se utiliza o getSingleResult, se houver a possibilidade de não voltar nada para uma determinada consulta, tratar esta exceção se você não quiser que a aplicação de erro e pare.