Olá senhores tudo bm!!
Estou com um problema no ResultSet, esta retornado somente "FALSE". Tem como alguém dar uma olhada onde esta o erro, pois já tem um tempo que estou sem solução.
Segue o códio:
publicUsuariogetUsuario(Stringusername,Stringpassword){
Connectionc=this.conexao;PreparedStatementps=null;ResultSetrs=null;try{
ps=(PreparedStatement)c.prepareStatement("select idlogin, username from usuario where username = ? and password = ?");ps.setString(1,username);ps.setString(2,password);//-----------------ERRO---------rs=ps.executeQuery(); if(rs.next()){//-----------------ERROsóreturnfalseUsuariouser=newUsuario();user.setIdlogin(rs.getInt("idlogin"));user.setUsername(username);user.setPassword(password);user.setUsername(rs.getString("username"));returnuser;}
Cara, pode parecer ridículo, mas tenta pegar esse mesmo SQL e mandar bala no banco. Está retornando alguma coisa?
D
Djamilson
jaboot blz!
A SQL está correta “select idlogin, username from webdb.usuario where username = “djam” and password = “123”;”, retorna o usuário do banco com idlogin.
Esta dando erro é quando executa rs.next().
B
bezier_curve
Por acaso o método prepareStatement está funcionando direito nessa classe que encapsula o JDBC?
D
Djamilson
Se eu colocar “ps = c.prepareStatement(” da erro.
S
strikezado
Coloca os import que tu deu nessa classe ae pra eu dar uma olhada.
raptor.x
Ola amigo,
Crie o objeto user antes do laço.
Tente usar while ao inves de if.
Retorne o obj após o fim do laço.
Por você ter que realizar um CAST ali pra PreparedStatement imagino que você tenha dado o import numa classe de outro pacote. Isso pode estár acaretando o problema do seu ResultSet. Se certifica ae que você está importando todas as classes do java.sql.
pmlm
raptor.x:
Ola amigo,
Crie o objeto user antes do laço.
Tente usar while ao inves de if.
Retorne o obj após o fim do laço.
Se ele procura somente um resultado porque razão deve usar um while??
ViniGodoy
Isso se chama programação por tentativa e erro.
As duas “dicas” que ele deu são ambas más práticas de programação:
Trocar uma instrução por outra (while), que não é equivalente, só porque não entendeu direito o erro impediu a primeira (if) de funcionar. No melhor caso, o código continua não rodando. No pior, esconde o erro em uma situação, gera um erro pior em outras;
Aumentar o escopo de uma variável, que estava no escopo correto. Não corrige o problema, e gera código sujeito a falhas.
Djamilson. Eu faria o seguinte para corrigir esse erro:
a) O código parece certo. Certo até demais para que o erro esteja aí. Então, verifique o que não está no código, como:
A connection está sendo criada para o banco certo?
Você já colocou um breakpoint para verificar se os parâmetros passados são EXATAMENTE iguais aos presentes no banco?
A dica dos imports corretos é boa para evitar os casts e melhorar a legibilidade do código, mas não é o que causa este problema (pode causar outros, mas não este).
D
Djamilson
Agradeço a todos que estão contribuindo.
Também adianto que todas essas tentativas ai ja tinha feito.
packagedao;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassFabricaConexao{privatejava.sql.Connectionconexao;publicConnectionfazConexao()throwsSQLException{try{Class.forName("com.mysql.jdbc.Driver");System.out.println("Conectado ao Banco");conexao=DriverManager.getConnection("jdbc:mysql://localhost/webdb","root","1alves");}catch(ClassNotFoundExceptione){thrownewSQLException(e.getMessage());}returnconexao;}publicvoidfechaConexao(){if(conexao!=null){try{System.out.println("Fechando conexao...");conexao.close();}catch(SQLExceptionex){//}}else{System.out.println("Conexao esta nula!!!");}}}//---------------------------------------------------------------------------------------------------------packageaction;[code]importdao.FabricaConexao;importdao.JDBCUsuarioDAO;importjava.io.IOException;importjava.sql.Connection;importjava.sql.SQLException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importmodelo.Usuario;publicclassServletValidaLoginextendsHttpServlet{@OverrideprotectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{HttpSessionsession=request.getSession();//obtem a sessao do usuario, caso existaUsuariouser=null;Stringlogin_form=request.getParameter("username_form");// Pega o Login vindo do formularioStringsenha_form=request.getParameter("password_form");//Pega a senha vinda do formulario//<%------------------------------------------------------------------->try{FabricaConexaofabrica=newFabricaConexao();Connectionconexao=fabrica.fazConexao();JDBCUsuarioDAOdao=newJDBCUsuarioDAO(conexao);System.out.println("------------------------------------------------");user=dao.getUsuario(login_form,senha_form);System.out.println("User: "+user);System.out.println("------------------------------------------------");fabrica.fechaConexao();}catch(SQLExceptionex){}//<%------------------------------------------------------------------->//se nao encontrou usuario no banco, redireciona para a pagina de erro!if(user==null){session.invalidate();request.getRequestDispatcher("erroLogin.jsp").forward(request,response);}else{//se o dao retornar um usuario, coloca o mesmo na sessaosession.setAttribute("usuario",user);request.getRequestDispatcher("logado.jsp").forward(request,response);}}@OverridepublicStringgetServletInfo(){return"Short description";}// </editor-fold>}//----------------------------------------------------------------------------------------------------packagedao;importcom.mysql.jdbc.PreparedStatement;importjava.sql.SQLException;importmodelo.Usuario;importjava.sql.Connection;importjava.sql.ResultSet;/** * * @author Djamilson */publicclassJDBCUsuarioDAOimplementsUsuarioDAO{Connectionconexao;//cria variavel com o nome conexaopublicJDBCUsuarioDAO(Connectionconexao){this.conexao=conexao;}@OverridepublicUsuariogetUsuario(Stringusername,Stringpassword){Connectionc=this.conexao;PreparedStatementps=null;ResultSetrs=null;try{ps=(PreparedStatement)c.prepareStatement("select idlogin, username from usuario where username = ? and password = ?");ps.setString(1,username);ps.setString(2,password);//-----------------ERRO---------rs=ps.executeQuery();Usuariouser=newUsuario();System.out.println("rs:======== "+rs);if(rs.next()){user.setIdlogin(rs.getInt("idlogin"));user.setUsername(username);user.setPassword(password);user.setUsername(rs.getString("username"));returnuser;}}catch(SQLExceptione){e.printStackTrace();}finally{if(rs!=null){try{rs.close();}catch(SQLExceptione){;}rs=null;}if(ps!=null){try{ps.close();}catch(SQLExceptione){;}ps=null;}if(c!=null){try{c.close();}catch(SQLExceptione){;}c=null;}}returnnull;}}//--------------------------------------------------------------------------------------------------packagedao;importmodelo.Usuario;publicinterfaceUsuarioDAO{publicUsuariogetUsuario(Stringusername,Stringpassword);}//--------------------------------------------------------------------------------------------------packagemodelo;publicclassUsuario{privateintidlogin;privateStringusername;privateStringpassword;privateStringtipo;publicintgetIdlogin(){returnidlogin;}publicvoidsetIdlogin(intidlogin){this.idlogin=idlogin;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}publicStringgetTipo(){returntipo;}publicvoidsetTipo(Stringtipo){this.tipo=tipo;}publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}}
pmlm
Deve ser import java.sql.PreparedStatement;
D
Djamilson
pmlm tudo bm!
Fiz a alteração sugerida só que ainda nao funcionou.
D
Djamilson
ViniGodoy blz, já tinha feito esse teste, mandando imprimir os valores, depois comparei…
São iguais ao do banco.
raptor.x blz, também criei o objeto antes e troquei o laço de repetição pelo while, nao funcionou…