Sistema de login

9 respostas
I

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.

Valeu

9 Respostas

B

Bom, se o seu rs for um java.sql.ResultSet, vc pode usar o método next()… sempre consulte oJavaDocs

erick.pessoa

Bom dia, Igor …

Você poderia fazer dessa forma:

<blockquote>ResultSet rs = stmt.executeQuery(“SELECT usr_login, usr_email FROM usuario WHERE usr_login=’”+loginForm.get(“usuario”)+"’ AND usr_senha=’"+loginForm.get(“senha”)+"’");

rs.first();

if (rs.isFirst()) {

}</blockquote>

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…

:slight_smile:

Espero ter ajudado,
Erick Pessoa

I

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

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

Esse “inter” é um resultset?

O método next() do resultset retorna boolean…

I

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.

erick.pessoa
Essa exceção é acionada pelo método next() ... Indica que não  mais elementos ... -> Você pode encontrar essa informação na especificação da API java ... na seção: java.util
Se ele encontrou algum registro é por que o usuário com uma determinada senha existe ... logo ele dever direcionado para a página seguite...

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

Gambiarrado pelo rodrigo gomes
A linha 48 do login eu tenho

Dado verifica = (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.

Criado 31 de janeiro de 2005
Ultima resposta 31 de jan. de 2005
Respostas 9
Participantes 4