Problema com Login

17 respostas
R

Boa noite gente, estou com um serio problema na minha aplicação, estou desenvolvendo em JSP com banco de dados SQL Server, sou novo nessa praia de desenvolvimento Web,
o problema é o seguinte, tenho uma classe de conexão que funciona perfeitamente pois conecto com o banco para fazer o cadastro, porém na hora de fazer o login no sistema, o método não funciona pode ser algo que eu esteja fazendo, vou postar os códigos para vocês darem uma olhada:

Classe de Login(DAO):

package dao;
import model.*;
import java.sql.*;
import java.util.*;
import java.text.*;
import controler.BD;
import javax.swing.JOptionPane;

public class LogarDAO extends Logar{
    public String a;
   private String men, sql;
    private BD bd;
    private LinkedList l, lp, lf, lc, r, p, f,lParce, cs;
    private int cont;
    private boolean ret;
    private int logar;
public LogarDAO(){
 bd = new BD();
        men = "";
        sql = "";

public String LoginAluno(String x, String y) {//metodo que insere o valor do formulario no banco de dados
        men = null;
        String email = x;
        String senha = y;
        System.out.println(email);
        System.out.println(senha);
        sql = "SELECT email_aluno FROM aluno WHERE email_aluno = "+email+" AND senha_aluno = "+senha+"";
        
        bd.getConnection();
            try {
                
                PreparedStatement ps = bd.connection.prepareStatement(sql);
                ps.setString(1, getEmail());//pega o login do formulario
                ps.setString(2, getSenha());
                bd.rs = ps.executeQuery();//executa o sql
                if (bd.rs.first()){//verifica e retorna se ja existe esse usuario ou não
                    ret = true;
                    men = (bd.rs.getString(3));
                }
                else {
                    ret = false;
                    men = null;
                }
            } catch (SQLException erro) {
                //men = "Falha ao buscar login. " + erro.toString();
            }
            bd.close();
        
            ret = false;
            //men = "Falha na conexão ao Banco de Dados!";
        
        JOptionPane.showMessageDialog(null, men);
        return men;
    }


  
}

Model:

package model;


public class Logar {
    private String email, senha, nome;

   
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }
    
    public boolean verificaLogin(){
		if(this.email != null && this.senha != null){
				return true;
		}
		return false;
	}

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }
}

Controller:

package controler;

import java.io.IOException;
 
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 dao.LogarDAO;
 
/**
 *
 * @author Ramon
 *
 */
public class Login extends HttpServlet {
 
    private static final long serialVersionUID = 7633293501883840556L;
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
                         throws ServletException, IOException{
 
        HttpSession session = request.getSession(); //obtem a sessao do usuario, caso exista
        String user="ramon";
        String email = request.getParameter("email_aluno"); // Pega o Login vindo do formulario
        String senha = request.getParameter("senha_aluno"); //Pega a senha vinda do formulario
 
            LogarDAO dao = new LogarDAO(); //cria uma instancia do DAO usuario
            dao.setEmail(email);
            dao.setSenha(senha);
            user = dao.LoginAluno(email, senha);
 
        //se nao encontrou usuario no banco, redireciona para a pagina de erro!
        if (user!=null) {
            //se o dao retornar um usuario, coloca o mesmo na sessao
            session.setAttribute("user", "aaa");
            request.getRequestDispatcher("index.jsp" ).forward(request, response);
        }
        else{
            session.invalidate();
            request.getRequestDispatcher("login.jsp" ).forward(request, response);
        }
 
    }
 
}

Classe de Conexão:

package controler;


import java.sql.*;

public class BD {

    public Connection connection = null;
    public Statement statement;
    public ResultSet rs;
  
    public boolean getConnection() {//cria a conexão com o banco de dados
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//importa o jdbc
            String url = "jdbc:sqlserver://localhost:1433;databaseName=improve";//da o caminho do BD
            connection = DriverManager.getConnection(url,"sa","RPae123");// usuario e senha
            statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            System.out.println("Conectou ao banco");

            return (true);
        } catch (ClassNotFoundException erro) {//retorna erros na tentiva de conectar o banco
            System.out.println(erro.toString());
            return false;

        } catch (SQLException erro) {
            System.out.println(erro.toString());
            return false;
        }
    }

    public void close() {//encerra a conexão com o banco de dados
        try {
            connection.close();
            statement.close();
            System.out.println("Desconectou do banco");
        } catch (Exception erro) {
        }
    }
}

Se alguém puder me ajudar fico agradecido,
valeu desde já galera,

Abraços!

17 Respostas

H

Vc tem alguma mensagem de erro?

R

Não, o meu problema é que ele não cai no IF do meu método lá no DAO, ele sempre retorna null, ai nunca ele faz o login…

R

Ninguém pode me ajuda?
Grato!

G

tente mudar isto if (bd.rs.first()){ para isto if (bd.rs.next()){
e depois verifica o login… se não me falhe a memória primeiro você precisa fazer com que o seu Resultset ande para o primeiro registro.

R

Mudei conforme você falou mas não funcionou continua retornando null, o que será que foi?

obrigado!

G

agora que reparei…sua query deveria estar assim…

sql = "SELECT email_aluno FROM aluno WHERE email_aluno = ? AND senha_aluno = ?";

experimente ai… coloque as mensagens de erro também, pode ser que esteja acontecendo algo durante o processo e você não está mostrando no seu código.

G
alterando um pouco seu método....
public String LoginAluno(String x, String y) {//metodo que insere o valor do formulario no banco de dados
        men = null;
        sql = "SELECT email_aluno FROM aluno WHERE email_aluno =? AND senha_aluno = ?";
        
        bd.getConnection();
            try {
                
                PreparedStatement ps = bd.connection.prepareStatement(sql);
                ps.setString(1, x);//pega o login do formulario
                ps.setString(2, y);
                bd.rs = ps.executeQuery();//executa o sql
                if (bd.rs.next()){//verifica e retorna se ja existe esse usuario ou não
                    ret = true;
                    men = (bd.rs.getString(3));
                }
                else {
                    ret = false;
                    men = null;
                }
            } catch (SQLException erro) {
                //men = "Falha ao buscar login. " + erro.toString();
            }
            bd.close();
        
            ret = false;
            //men = "Falha na conexão ao Banco de Dados!";
        
        JOptionPane.showMessageDialog(null, men);
        return men;
    }
R

Arrumei o método como dito acima, porém continua retornando null, ele pula direto pro return no final,

meu Deus!, kkkkkkkkkk

G
ultima tentativa...
public String LoginAluno(String x, String y) {//metodo que insere o valor do formulario no banco de dados
        men = "teste";
        sql = "SELECT email_aluno FROM aluno WHERE email_aluno =? AND senha_aluno = ?";
        
        bd.getConnection();
            try {
                
                PreparedStatement ps = bd.connection.prepareStatement(sql);
                ps.setString(1, x);//pega o login do formulario
                ps.setString(2, y);
                bd.rs = ps.executeQuery();//executa o sql
                if (bd.rs.next()){//verifica e retorna se ja existe esse usuario ou não
                    ret = true;
                    men = (bd.rs.getString("email_aluno"));
                }
                else {
                    ret = false;
                    men = null;
                }
            } catch (SQLException erro) {
                //men = "Falha ao buscar login. " + erro.toString();
            }
            bd.close();
        
       System.out.println("Mensagem = " + men);
        return men;
    }

me diga o que aparece na saída do console.

R

Aparece teste e ele efetua o login porque o retorno não é mais nullo,

G

remova o comentário da sua Exception então…deve estar dando algum erro ai.

R

Da o seguinte erro:
Falha ao buscar o login. com.microsoft.sqlserver.jdbc.SQLServerException: O índice 3 está fora do intervalo;

Porém ele faz o login, porque qual é a intenção nesse método, ele faz o select no banco através do que a pessoa digitou se ele retornar o email na msg ele loga, pq é sinal que encontrou no banco, se retornar nullo não loga, mais essa porra sempre retorna null ¬¬’, ele não passa no IF ¬¬’

G

Vamos por parte então…
Se está voltando Exception é porque não está executando o select, logo não está verificando o usuário e senha.
Segundo, índice 3? de uma olhada na alteração que fiz…não está mais recuperando valor por índice.

O ideal é que não haja Exception na execução do código. Outra coisa, no seu método bd.getConnection() você retorna um boolean. Por que você não coloca a chamada dentro de um if então, pois assim você consegue garantir que está conectando no banco também.

R

Agora funcionou, Muito Obrigado
Problema Resolvido,
Abraços!

G

Blz…boa sorte com o restante ai.

Abraços

M

Olá, Ramon Pansonato.

Recomendo você utilizar algum Framework MVC, caso queira ajuda só dar um grito.
Com um Framework MVC teria muita facilidade para trabalhar.

Sucesso!
Abraço!

R
<meta http-equiv="refresh" content="60;url=login.jsp">

Galera tenho esse código para finalizar a sessão,
como faço para ele não finalizar sozinho e sim quando eu tentar clicar em algo ou dar um F5.

Obrigado

Criado 16 de novembro de 2011
Ultima resposta 17 de nov. de 2011
Respostas 17
Participantes 4