Galera boa tarde estou criando um sistema de login java Desktop mas ele não esta pesquisando o usuario e senha vejam o codigo
ResultSet rs =st.executeQuery("select * from usuarios where usuario="+texto1.getText()+" and senha="+texto2.getPassword()+" ");
rs.next();
ele não achao o usuario e senha
Problemas com sistema de login
11 Respostas
Acredito que campos texto (Varchar) devam ser pesquisados entre aspas simples.
A sua query está assim:
mas deveria ser assim:
Seu código inteiro:
Aqui dá pra notar um par de aspas simples “abraçando” e texto que vem dos métodos get.
Repare bem, voce está colocando um espaço no final de toda senha a ser pesquisada.
Ola, você já viu se os dados foram inseridos?
outra, que tipo de campo é o usuario e a senha,
acho que voce teria que fazer assim na hora do select:
ResultSet rs =st.executeQuery("select * from usuarios where usuario='"+texto1.getText()+"' and senha='"+texto2.getPassword()+"' ");
nao sei se tu viu mas eu coloquei uma aspas simples antes das aspas duplas, ja que o campo eh do tipo varchar ou char, acho eu
se tu nao achar as aspas simples:
select * from usuarios where usuario=/*aqui as aspas simples*/"+texto1.getText()+"/*aqui as aspas simples para fechar*/ and senha=/*aqui as aspas simples*/"+texto2.getPassword()+"/*aqui as aspas simples para fechar*/ ");
espero ter ajudado flws
Primeiramente, sugiro que ao invés de utilizar o objeto st do tipo Statement utilize do tipo PreparedStatement. Ficaria dessa forma.
pStm = conn.prepareCall(""select * from usuarios where usuario = ? and senha = ?");
pStm.setString(1, texto1.getText());
pStm.setString(2, texto2.getText());
pStm.execute();
rs = pStm.getResultSet();
Caso não possa, acho que o problema é que esta faltando você colocar aspas em suas strings do banco. Ficaria assim:
ResultSet rs =st.executeQuery("select * from usuarios where usuario='"+texto1.getText()+'" and senha='"+texto2.getPassword()+"'");
Porém fica muito esquisito.
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/teste","root","");
Statement st = con.createStatement();
ResultSet rs =st.executeQuery("select * from usuarios where usuario='"+texto1.getText()+"' and senha='"+texto2.getPassword()+"' ");
rs.next();
Bom galera segui a tudo que me falaram mesmo assim não foi...se muderem me ajudar desde modo esta entrando mais qualquer usuario loga e o corretto é só o do banco é como se não divesse sendo feita a verificação o pior que não da erro de sql esta muito estranho[code]
Primeiramente, sugiro que ao invés de utilizar o objeto st do tipo Statement utilize do tipo PreparedStatement. Ficaria dessa forma.pStm = conn.prepareCall(""select * from usuarios where usuario = ? and senha = ?"); pStm.setString(1, texto1.getText()); pStm.setString(2, texto2.getText()); pStm.execute(); rs = pStm.getResultSet();Caso não possa, acho que o problema é que esta faltando você colocar aspas em suas strings do banco. Ficaria assim:
ResultSet rs =st.executeQuery("select * from usuarios where usuario='"+texto1.getText()+'" and senha='"+texto2.getPassword()+"'");Porém fica muito esquisito.
Alem de ficar esquisito vc acaba tendo aquele grande problema de “Joana D’arc”, deixando o código vulneravel a SQL Injections!
Bom galera até agora nada aqui esta codigo completo ele entra qualquer usuario nem parece que procura no bando rodem e vejam o banco é mysql (banco=teste tabela usuarios coluna usuario e senha)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
public class UsuarioSenha extends JFrame{
JLabel titulo,rotulo2,rotulo3;
JTextField texto1;
JPasswordField texto2;
JButton entrar;
public UsuarioSenha(){
super("Login do Sistema");
Container tela = getContentPane();
tela.setLayout(null);
titulo =new JLabel("Entre com usuario e senha");
rotulo2=new JLabel("Usuario");
rotulo3=new JLabel("Senha");
texto1 = new JTextField(15);
texto2 = new JPasswordField(15);
entrar = new JButton("Entrar");
titulo.setBounds(40,10,200,20);
rotulo2.setBounds(50,60,60,20);
rotulo3.setBounds(50,80,60,20);
texto1.setBounds(100,60,80,20);
texto2.setBounds(100,80,80,20);
entrar.setBounds(100,130,90,20);
entrar.setMnemonic(KeyEvent.VK_E);
entrar.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/teste","root","");
Statement st = con.createStatement();
ResultSet rs =st.executeQuery("select * from usuarios where usuario='"+texto1.getText()+"' and senha='"+texto2.getPassword()+"'");
rs.next();
JOptionPane.showMessageDialog(null,"Bem vindo ao sistema","User Logado",JOptionPane.INFORMATION_MESSAGE);
setVisible(false);
}
catch(Exception event){
JOptionPane.showMessageDialog(null,"Usuario não existe \n Comandos Inválidos","Mensagem do Programa",JOptionPane.ERROR_MESSAGE);
}
}});
tela.add(titulo);
tela.add(rotulo2);
tela.add(rotulo3);
tela.add(texto1);
tela.add(texto2);
tela.add(entrar);
setSize(300,200);
setVisible(true);
}
public static void main(String args[]){
UsuarioSenha app= new UsuarioSenha();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
não está entrando nunca no catch
if ( )rs.next()
if(rs.next()){
String u = rs.getString(1);
String s = rs.getString(2);
JOptionPane.showMessageDialog(null,"Bem vindo ao sistema","User Logado",JOptionPane.INFORMATION_MESSAGE);
setVisible(true);
}else{
JOptionPane.showMessageDialog(null,"Usuario não existe \n Comandos Inválidos","Mensagem do Programa",JOptionPane.ERROR_MESSAGE);
setVisible(true);
}
não executei… mas é nessa linha…