Tenho o código abaixo, e ele funciona, quando algo veio do banco de dados. Quando o banco de dados não retorna valores ele da erro.
Minha dúvida gira em torno de:
quando tenho um dado dentro da classe eu posso usar o usuario.getDadoQueQuero mas como testar se esse dado exite, pois quando ele tenta testar no ELSE ele retorna o erro.
javax.persistence.NoResultException: getSingleResult() did not retrieve any entities.
Existe algum método específico para isto? Estou usando JPA (como deve ter dado pra perceber. kkk )
[quote=drsmachado]Sim, este é outro ponto. O erro persiste por que você está fazendo um
SELECT * FROM qualquer_tabela WHERE qualquer_tabela.qualquer_atributo = ?
E não encontra nada.
Das duas uma, ou não tem dados na tabela ou o parâmetro passado não confere com nenhum registro que existe na tabela.[/quote]
Seguinte, o select que estou tentando é pegar o login do usuario e a senha dele e conferir no BD se existe a mesma combinação.
se positivo a query retorna apenas um valor, se o login ou senha estiverem errados ou não existirem no banco de dados, então não irá retornar nada mesmo. Achei mais prático assim pois faço o calculo do MD5 da senha e a comparação diretamente dentro do BD.
Exemplo de uso preenchido:
retorna 1 resultado> SELECT * FROM Usuario WHERE LoginUsu = ‘admin’ AND SenhaUsu = MD5(‘admin’)
retorna nenhum resultado> SELECT * FROM Usuario WHERE LoginUsu = ‘admin’ AND SenhaUsu = MD5(‘QualquerOutraSenha’)
[quote=drsmachado]Mas como quer fazer isso se passa apenas o parâmetro referente ao login?
Onde está enfiando a senha, camarada?[/quote]
Desculpe… é que postei o exemplo sem o md5… mas questão é assim então.
Dividir em problemas menores o MD5 é outro problema.
Vamos lá.
Pego o login do usuario e vou ate o bd buscando esse usuario. Se ele informar um usuario correto então irá retornar um valor (considerando usuario como campo UNIQUE)
Mas se ele informar um usuario inexistente ira retornar zero valores, portanto sei que o usuario não existe. Como tratar isto?
porque quando informa usuario inexistente no bd ele pega e esta dando o erro.
Como o drsmachado mesmo disse, o getSingleresult espera um resultado final, por isto dispara um exception, já o list aceita não retornar nada. Então troquei o single por um list, e em vez de povoar o objeto com os dados eu coloquei tudo dentro de uma Lista.
//entra aqui se a query não retorna nada
JOptionPane.showMessageDialog(null, “Usuário ou senha inválidos!”);
return (false);
} else {
//aqui faz os testes se retornar aqui
if (usuarios.get(0).getLoginUsu().equals(this.login)){
return (true);
}
}[/code]