ResultSet está retornando so False

13 respostas
D

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:

public Usuario getUsuario(String username, String password) {
        Connection c = this.conexao;
        PreparedStatement ps = null;
        ResultSet rs = 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()) {  
           //-----------------ERRO só return false
                Usuario user = new Usuario();
                user.setIdlogin(rs.getInt("idlogin"));
                user.setUsername(username);
                user.setPassword(password);
                user.setUsername(rs.getString("username"));

                return user;
            }

13 Respostas

jaboot

Cara, pode parecer ridículo, mas tenta pegar esse mesmo SQL e mandar bala no banco. Está retornando alguma coisa?

D

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

Por acaso o método prepareStatement está funcionando direito nessa classe que encapsula o JDBC?

D

Se eu colocar “ps = c.prepareStatement(” da erro.

S

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.

Ficaria mais ou menos assim:

Usuario user = new Usuario();  
while (rs.next()) {    
    user.setIdlogin(rs.getInt("idlogin"));   
    user.setUsername(username);   
    user.setPassword(password);  
    user.setUsername(rs.getString("username"));  
}  
return user;

Teste e veja se funciona.
Espero ter ajudado!!!

S

Só pra adiantar verifica se os import estão assim:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

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.

Ficaria mais ou menos assim:

Usuario user = new Usuario();  
while (rs.next()) {    
    user.setIdlogin(rs.getInt("idlogin"));   
    user.setUsername(username);   
    user.setPassword(password);  
    user.setUsername(rs.getString("username"));  
}  
return user;

Teste e veja se funciona.
Espero ter ajudado!!!

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:

  1. 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;
  2. 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:

  1. A connection está sendo criada para o banco certo?
  2. 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

Agradeço a todos que estão contribuindo.
Também adianto que todas essas tentativas ai ja tinha feito.

package dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class FabricaConexao {

    private java.sql.Connection conexao;

    public Connection fazConexao() throws SQLException {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("Conectado ao Banco");
            conexao = DriverManager.getConnection("jdbc:mysql://localhost/webdb", "root", "1alves");
        } catch (ClassNotFoundException e) {
            throw new SQLException(e.getMessage());
        }
        return conexao;
    }

    public void fechaConexao() {
        if (conexao != null) {
            try {
                System.out.println("Fechando conexao...");
                conexao.close();
            } catch (SQLException ex) {
                //
            }
        } else {
            System.out.println("Conexao esta nula!!!");
        }
    }
}
//---------------------------------------------------------------------------------------------------------
package action;
[code]
import dao.FabricaConexao;
import dao.JDBCUsuarioDAO;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import modelo.Usuario;

public class ServletValidaLogin extends HttpServlet {

   
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        HttpSession session = request.getSession(); //obtem a sessao do usuario, caso exista

        Usuario user = null;
        String login_form = request.getParameter("username_form"); // Pega o Login vindo do formulario
        String senha_form = request.getParameter("password_form"); //Pega a senha vinda do formulario
      
//<%------------------------------------------------------------------->
        try {

            FabricaConexao fabrica = new FabricaConexao();
            Connection conexao = fabrica.fazConexao();
           
            JDBCUsuarioDAO dao = new JDBCUsuarioDAO(conexao);
         
            System.out.println("------------------------------------------------");
            user = dao.getUsuario(login_form, senha_form);
            System.out.println("User: " + user);
            System.out.println("------------------------------------------------");
            fabrica.fechaConexao();     
        } catch (SQLException ex) {
        }
        //<%------------------------------------------------------------------->
//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 sessao
            session.setAttribute("usuario", user);
            request.getRequestDispatcher("logado.jsp").forward(request, response);
        }

    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

//----------------------------------------------------------------------------------------------------
package dao;

import com.mysql.jdbc.PreparedStatement;
import java.sql.SQLException;
import modelo.Usuario;
import java.sql.Connection;  
import java.sql.ResultSet; 

/**
 *
 * @author Djamilson
 */
public class JDBCUsuarioDAO implements UsuarioDAO {

    Connection conexao;//cria variavel com o nome conexao

    public JDBCUsuarioDAO(Connection conexao) {
        this.conexao = conexao;
    }

    @Override
    public Usuario getUsuario(String username, String password) {
        Connection c = this.conexao;
        PreparedStatement ps = null;
        ResultSet rs = 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();     
            Usuario user = new Usuario();
            System.out.println("rs:======== "+rs);
            if (rs.next()) {                 
      
                user.setIdlogin(rs.getInt("idlogin"));                
                user.setUsername(username);
                user.setPassword(password);
                user.setUsername(rs.getString("username"));
               
                return user;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {;
                }
                rs = null;
            }
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {;
                }
                ps = null;
            }
            if (c != null) {
                try {
                    c.close();
                } catch (SQLException e) {;
                }
                c = null;
            }
        }
        return null;
    }
}
//--------------------------------------------------------------------------------------------------
package dao;

import modelo.Usuario;

public interface UsuarioDAO {
  public Usuario getUsuario(String username, String password );
}
//--------------------------------------------------------------------------------------------------

package modelo;

public class Usuario {
    private int idlogin;
    private String username;
    private String password;
    private String tipo;

   public int getIdlogin() {
	return idlogin;
   }

   public void setIdlogin(int idlogin) {
	this.idlogin = idlogin;
   }

   public String getPassword() {
	return password;
   }

   public void setPassword(String password) {
	this.password = password;
   }

   public String getTipo() {
	return tipo;
   }

   public void setTipo(String tipo) {
	this.tipo = tipo;
   }

   public String getUsername() {
	return username;
   }

   public void setUsername(String username) {
	this.username = username;
   }
    
}
pmlm

Deve ser import java.sql.PreparedStatement;

D

pmlm tudo bm!

Fiz a alteração sugerida só que ainda nao funcionou.

D

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…

Criado 28 de novembro de 2011
Ultima resposta 29 de nov. de 2011
Respostas 13
Participantes 7