Bem, gostaria que me ajudasse com uma aplicação java que estou tentando fazer. É uma simples tela de login com banco de dados MySQL. Não sei porque o sistema só encontra o primeiro usuário. Se eu tiver 3, 4 ou mais usuários no meu BD de dados, só consigo fazer login com o nome e senha do primeiro usuário. Outra coisa, também tentei fazer usando o preparedStatement, mas a coisa piorou, sempre dava pau. Tirei o preparedstatment e passou a funcionar, porem, só encontra o primeiro usuários, nos demais sempre da senha ou nome de usuário invalido.
O código que usei foi esse :
publicvoidlogar(){try{conexaoBDConecta=newconexaoBD();Conecta.conecta();Conecta.statement=Conecta.conexao.createStatement();Conecta.executeSQL("select * from usuarios");Conecta.resultset.first();if(usuario.getText().equals(Conecta.resultset.getString("login"))&&senha.getText().equals(Conecta.resultset.getString("senha"))){JOptionPane.showMessageDialog(null,"Acesso Permitido!!!");TelaPrincipal.show();}else{JOptionPane.showMessageDialog(null,"Usuário e/ou senha inválidos!!!");}}catch(SQLExceptione){JOptionPane.showMessageDialog(null,e);}}
Do jeito que está a chance do usuário estar correto é mínima à medida que a tabela cresce, afinal você está trazendo todos os usuários para comparar…
Além da dica do @graweb, usando preparedStatement…
publicvoidlogar(){try{conexaoBDConecta=newconexaoBD();Conecta.conecta();Stringsql="select * from usuarios where login=? and senha=?";PreparedStatementpstm=Conecta.conexao.prepareStatement(sql);pstm.setString(1,usuario.getText());pstm.setString(2,senha.getText());ResultSetrs=pstm.executeQuery();booleanusuarioLogado=rs.next();// se trouxe um registro...// linhas importantes...rs.close();pstm.close();if(usuarioLogado){JOptionPane.showMessageDialog(null,"Acesso Permitido!!!");TelaPrincipal.show();}else{JOptionPane.showMessageDialog(null,"Usuário e/ou senha inválidos!!!");}}catch(SQLExceptione){JOptionPane.showMessageDialog(null,e);}}
Outra coisa a se atentar, se seu campo de senha é um JPasswordField, não use getText, use getPassword…
Essa outra apostila, mostra logo no começo como implementar o padrão DAO, facilitando a manipulação com o banco e separando bem cada situação…
J
jcvilanova
pode me dizer como resolvo nesse caso específico ? o que devo mudar ai ?
J
jcvilanova
O interessante é que depois que tirei as linhas que você indicou como desnecessárias, o sistema diz alteração realizada com sucesso, mas na verdade, não alterou nada no BD.
L
LostSoldier
Retirar essas linhas, é como te falei, o ResulstSet é usado para instruções select, nesse último caso você não precisa disso já que está usando update, pegou?
Leia apostila de orientação a objetos que te passei, se aprofunde ao máximo, caso o contrário você terá dificuldades em prosseguir nos estudos…
J
jcvilanova
Dei uma lida aqui no que você mandou, fiz as alterações e funcionou.
Obrigado pela dica