Fala pessoal, tudo bom?
Estou desenvolvendo um sistema de login e gostaria de algumas informações:
Quando eu encontro o usuario e a senha certos ele volta os dados bonitinhos para pegar a session e tal. Porém, se eu entro com uma senha errada, ele da um erro porque não consegue ler os dados que voltou, como devo proceder para tratá-los na busca para que não retorne com problemas?
Como faço para verificar se o rs tem um resultado ou se ele não achou nada?
tipo o rs.EOF que tem em algumas linguagens.
rs é direcionado para o primeiro registro, retornado pela execução da query … depois ele testa é o primeiro existe … caso verdade vc direciona o usuário para página seguinte…
Espero ter ajudado,
Erick Pessoa
I
Igor_Barros
ok, obrigado Erick, era algo parecido com isso que precisava, obrigado também ao Bignotto, olhei o javadoc mas não consegui aliar o rs.first() com o fato de ter dados ou não.
Valeu
I
Igor_Barros
Agora esta acontecendo um problema novo… hehehehe
Se eu mover para o rs.first eu consigo verificar se ele encontrou e assim fazer ele ir para a página de erro, mas agora não consigo mais me autenticar com a senha e user corretos.
Estou fazendo o seguinte…
Eu chamo uma classe pelo meu servlet controller e passo os dados de login e senha. feito isso ele abre o banco e busca o resultado com akele login e senha. Assim lá embaixo, quando o banco retorna vazio, eu mando uma collection com login e senha invalidos para o servlet controller, mas agora quando ele acha algum valor, eu não consigo mandar a collection, ele dá o seguinte erro: java.util.NoSuchElementException
java.util.LinkedList$ListItr.next(Unknown Source)
login.Login.doPost(Login.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
no login na linha 48, tenho meu iterator assim: Dado verifica = (Dado) iter.next();
B
Bignotto
Esse “inter” é um resultset?
O método next() do resultset retorna boolean…
I
Igor_Barros
Esse iter é um collection, linked list.
O que eu faço…
Eu gravo as informações com o resultset assim:
while (rs.next()) {
Dado dado = new Dado();
dado.setUsername(rs.getString("username"));
dado.setPassword(rs.getString("password"));
login.add(dado);
Esse login é um collection linked list.
ai return login para o servlet
no servlet pego assim:Collection login = new LinkedList();
Data procura = new Data();
login = procura.login(username, password);
Iterator iter = login.iterator();
Dado verifica = (Dado) iter.next();
if ((verifica.getUsername().equals(username))
&& (verifica.getPassword().equals(password))) {
response.sendRedirect("entrou");
} else {
response.sendRedirect("errou");
}
Quando erro ele passa para o errou com código certo, mas agora quando está certo o login e a senha, ele mostra o exception da mensagem de cima.
Posta o trecho do teu cód que envolve a linha 48, pois fica mais fácil …
rodrigo_gomes
depois que vc usar o rs.first() e verificar o que vc tinha que verificar, vc deve usar o método rs.beforeFirst() pra voltar para antes do primeiro registro, porque quando vc usa o first() ele vai para o primeiro registro, aí quando você tenta pegar os dados com next() ele vai para o segundo registro, que não existe, aí gera a exceção…
abraços
I
Igor_Barros
Gambiarrado pelo rodrigo gomes
A linha 48 do login eu tenho
Dadoverifica=(Dado)iter.next();
Com a gambiarra, meu código do método do banco ficou:
rs.first();
if (rs.isFirst() != false){
rs.beforeFirst();
while (rs.next()) {
Dado dado = new Dado();
dado.setUsername(rs.getString("username"));
dado.setPassword(rs.getString("password"));
login.add(dado);
}
} else {
Dado dado = new Dado();
dado.setUsername("invalido");
dado.setPassword("invalido");
login.add(dado);
}
Mais feio que bater na avó… mas tudo bem, o importante é fazer rodar para aprender.