[quote=cbcarlos07]pessoal nao sei porque justamente nesse caso nao está enviando
eis o código
[code]
public boolean Login(String login, String senha){
boolean status = false;
String login1, senha1;
connection = ConnectionFactory.getConnection();
sql = "SELECT * FROM usuarios WHERE "
+ "usu_login = ? AND "
+ “usu_senha = ?”;
try {
stmt = connection.prepareStatement(sql);
stmt.setString(1, login);
stmt.setString(2, senha);
resultSet = stmt.executeQuery();
if(resultSet.next()){//Até onde entendi, só vai entrar aqui se e somente se houver um resultado, ou seja, se usu_login = login e usu_senha = senha
login1 = resultSet.getString(“usu_login”);
senha1 = resultSet.getString(“usu_senha”);
if(login1.equals(login) && senha1.equals(senha)){//Assim sendo, se entrou no if, por que essa validação aqui???
Usuario usuario = new Usuario();//Não sei onde você chama esse método, só posso dizer que este aqui só vai viver até este if acabar.
String user = resultSet.getString(“usu_nome”);
usuario.setNome(user); //JOptionPane.showMessageDialog(null, "Usuario: "+user);
status = true;
}
}
else
JOptionPane.showMessageDialog(null, "Login ou senha inválido ");
} catch (SQLException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "Login ou senha inválido \nErro: "+ex.getMessage());
}
return status;
}[/code]
quando eu dou o comando usuario.getNome();
nao vem nada… alguem pode me ajudar?
Seria interessante você dar um println nas variaveis login1 e senha1 para ver se está recuperando corretamente do banco. Eu suponho que o erro seja esse.
[quote=LucasHP]Seria interessante você dar um println nas variaveis login1 e senha1 para ver se está recuperando corretamente do banco. Eu suponho que o erro seja esse.
Abraços.[/quote]
Supôs errado.
Olhe estas linhas
if(login1.equals(login) && senha1.equals(senha)){//Assim sendo, se entrou no if, por que essa validação aqui???
Usuario usuario = new Usuario();//Não sei onde você chama esse método, só posso dizer que este aqui só vai viver até este if acabar.
String user = resultSet.getString("usu_nome");
usuario.setNome(user);
//JOptionPane.showMessageDialog(null, "Usuario: "+user);
status = true;
}
[quote=androidelp]Ele retornou algum erro?
Tente usar o depurador?
pelo que estou vendo você está tentando fazer uma query que busca senha e login, nçao sei se este jeito está certo.
Se for sql ou mysql tente assim
sql = "select * from usuarios where usu_login = '"+VariavelLogin+"' and usu_senha = '"+Varia+ "'";
[/quote]
A query está certa no modo como está, ele usa PreparedStatement e a forma como você indicou é uma péssima prática de programação.
[quote=cbcarlos07]pessoal nao sei porque justamente nesse caso nao está enviando
eis o código
[code]public boolean Login(String login, String senha){
boolean status = false;
Usuario usuario = null;
String user = null;
String login1, senha1;
connection = ConnectionFactory.getConnection();
sql = “SELECT * FROM usuarios WHERE "
+ “usu_login = '”+login+”’ AND "
+ “usu_senha = '”+senha+"’";
try {
stmt = connection.prepareStatement(sql) ;
resultSet = stmt.executeQuery();
if(resultSet.next()){ //verifica se há retorno
login1 = resultSet.getString("usu_login");
senha1 = resultSet.getString("usu_senha");
if(login1.equals(login) && senha1.equals(senha)){ //compara se está exatamente igual MAIUSCULA e minúscula
usuario = new Usuario(); //chama a classe para setar no método setNome o nome do usuario
resultSet.getString("usu_nome");
usuario.setNome(user);
//JOptionPane.showMessageDialog(null, "Usuario: "+user);
status = true;
}
}
else
JOptionPane.showMessageDialog(null, "Login ou senha inválido ");
} catch (SQLException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "Login ou senha inválido \nErro: "+ex.getMessage());
}
return status;
}
}[/code]
como o MySQL nao é case senstive
exemplo: se a minha senha é ‘CARLOS’ e eu digitasse ‘carlos’ ele aceitaria
Por isso estou fazendo outra verificação no caso do
if (login.equals(login2) && senha.equals(senha2)){
}
Camarada, entenda uma coisa.
No código do tópico original, você declarava e instanciava o objeto usuario dentro do if. Ou seja, o escopo dele era até que o if acabasse.
Neste último, você o declara dentro do método Login (sim, com nome fugindo da especificação javaBeans). Isso aumenta o escopo dele, mas não faz milagres. Ou seja, quando o return é chamado, o usuario (objeto do método Login) morre.
Se você quer que o nome seja recebido, precisa fazer com que o mesmo deixe o método (o que não é possível, tendo em vista que você informa que o retorno é um boolean).
Sugestão, modifique o método, faça-o retornar o próprio objeto de usuario, caso exista e, caso não, retorne null.
Acho que como o drsmachado falou, seu código estava melhor antes, com PreparedStatement. Agora você não só não corrigiu o problema, como também adicionou uma péssima prática de programação ao código, e tornou-o vulnerável a bugs. Por exemplo, tente o login do sr. MacDonald’s.
Eu sugeriria que você use o depurador e rode o programa passo a passo. Aí você observa se o código entrou no if resultSet.next().