[Mysql] Janela de Login

5 respostas
Allan2M

Bom dia amigos, criei uma janela de Login para permitir entrada no meu programa, e ja consegui conecção com o banco de dados, porem não estou conseguindo "pegar" o valor que a pessoa digita no jTextField e coloca-lo em uma String.

Segue abaixo o meu codigo simplificado (vou colocar apenas o que acho que sera relevante, caso seja nescessario o resto é so falar):

public class jLogin extends JFrame {

	String sUsuario = null;
	String sSenha = null;

public jLogin() {

JTextField jTextUsuario = new JTextField(sUsuario);
			jTextUsuario.setBounds(80, 55, 200, 20);
			jTextUsuario.setFont(fPreencher);
			add(jTextUsuario);

JPasswordField jpassSenha = new JPasswordField(sSenha);
			jpassSenha.setBounds(80, 85, 200, 20);
			jpassSenha.setFont(fPreencher);
			add(jpassSenha);

Entrar entrar = new Entrar();
			
			JButton bEntrar = new JButton("Entrar");
			bEntrar.setFont(f);
			bEntrar.setBounds(50, 120, 90, 25);
			bEntrar.addActionListener(entrar);
			add(bEntrar);

}

public class Entrar implements ActionListener {
			public void actionPerformed(ActionEvent e) {

Connection conn = null;
			     String teste = "SELECT * FROM `operador` WHERE `Usuario` LIKE '"+sUsuario+"' AND `Senha` LIKE '"+sSenha+"'"; {
try {
Class.forName("com.mysql.jdbc.Driver");
			            conn = DriverManager.getConnection( "jdbc:mysql://localhost/dbrfid?user=root" );

 Class.forName("com.mysql.jdbc.Driver");
			            conn = DriverManager.getConnection( "jdbc:mysql://localhost/dbrfid?user=root" );
			            Statement stm = conn.createStatement();  
			            ResultSet rs = stm.executeQuery(teste);
			            String user = rs.getString("Usuario");
			            String senha = rs.getString("Senha");
			            if (sUsuario.equals(user)){
			            	if (sSenha.equals(senha)){
			            		dispose();
								janela principal = new janela();
			            	}else {
								System.exit(1);
			            	}
			            }else{
							System.exit(1);
			            }
catch (SQLException e1){
			            	
			        } catch (ClassNotFoundException e1) {
							e1.printStackTrace();
						}
			     }

Eu sei que está errado, e sei onde, eu não estou conseguindo regatar o valor que a pessoa digita nos jTextField, alguem pode me ajudar?

5 Respostas

sandro.ci02

sUsuario = jTextUsuario.getText();

Allan2M
sandro.ci02:
sUsuario = jTextUsuario.getText();

Obrigado, porem, eu acho que eu fiz o codigo totalmente errado, por que, não sei onde colocar o String sUsuario = jTextUsuario.getText(); se eu colocar ele na classe da função do botão ele não encontra o jTextUsuario por que o jTextUsuario está em uma class separada, eu teria que instanciar ele não teria? eu tentei com

jLogin jlogin = new jLogin();
String sUsuario = jTextUsuario.getText();

Resumindo, não se quando disparar isso, se for quando a pessoa clica entrar, então fica dentro da classe que da função ao botão, então como eu levo o valor do que a pessoa colocou no jTextUsuario até a classe que da função ao botão...

Eu tentei de tantas formas diferentes...

to a manha toda nisso, vou colocar meu codigo completo, só não reparem na bagunça por que fiquei a manha toda mechendo nele tentando e tentando

import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class jLogin extends JFrame {
	
	String sUsuario = jTextUsuario.getText(); 

	public jLogin() {
			super("Janela de Login");
			this.setResizable(false);
			setLayout(null);
			setDefaultCloseOperation(EXIT_ON_CLOSE);
			
			Point centro = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
			int largJanela = 300;
			int altJanela = 190;
			setBounds(centro.x - largJanela / 2, centro.y - altJanela / 2, largJanela, altJanela);			
			
			Font f = new Font("Arial",Font.BOLD,14);
			Font fPreencher = new Font("Arial",Font.LAYOUT_LEFT_TO_RIGHT,14);
			
			JLabel areaDeLogin = new JLabel("Área de Login");
			areaDeLogin.setFont(f);
			areaDeLogin.setBounds(100, 15, 100, 20);			
			add(areaDeLogin);
			
			JLabel usuario = new JLabel("Usuario");
			usuario.setFont(f);
			usuario.setBounds(15, 55, 80, 20);			
			add(usuario);
							
			JTextField jTextUsuario = new JTextField();
			jTextUsuario.setBounds(80, 55, 200, 20);
			jTextUsuario.setFont(fPreencher);
			add(jTextUsuario);
			
			JLabel senha = new JLabel("Senha");
			senha.setFont(f);
			senha.setBounds(15, 85, 60, 20);			
			add(senha);
			
			JPasswordField jpassSenha = new JPasswordField();
			jpassSenha.setBounds(80, 85, 200, 20);
			jpassSenha.setFont(fPreencher);
			add(jpassSenha);
			
			
			
			Entrar entrar = new Entrar();
			
			JButton bEntrar = new JButton("Entrar");
			bEntrar.setFont(f);
			bEntrar.setBounds(50, 120, 90, 25);
			bEntrar.addActionListener(entrar);
			add(bEntrar);
						
			Sair sair = new Sair();
			
			JButton bSair = new JButton("Sair");
			bSair.setFont(f);
			bSair.setBounds(160, 120, 90, 25);
			bSair.addActionListener(sair);
			add(bSair);
			
			ImageIcon img = new ImageIcon("C:\\RFID Daxsys\\Imagens\\fundoJanelaUsuarios.png");
		    JLabel jImagemFundo = new JLabel(img);
		    jImagemFundo.setBounds(0, 0,500,500);
		    add(jImagemFundo);
			setVisible(true);
				
			
			
			
		}
		
		

		public class Entrar implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				
				
				
				 Connection conn = null;
			     String teste = "SELECT * FROM `operador` WHERE `Usuario` LIKE '"+sUsuario+"' AND `Senha` LIKE '"+sSenha+"'"; {
			     System.out.println("user:"+sUsuario);

			        try {
			            Class.forName("com.mysql.jdbc.Driver");
			            conn = DriverManager.getConnection( "jdbc:mysql://localhost/dbrfid?user=root" );
			            Statement stm = conn.createStatement();  
			            ResultSet rs = stm.executeQuery(teste);
			            String user = rs.getString("Usuario");
			            String senha = rs.getString("Senha");
			            if (sUsuario.equals(user)){
			            	if (sSenha.equals(senha)){
			            		dispose();
								janela principal = new janela();
			            	}else {
								System.exit(1);
			            	}
			            }else{
							System.exit(1);
			            }
			            }catch (SQLException e1){
			            	System.out.println("SQL Exception... Erro na consulta:");
			                e1.printStackTrace();
			        } catch (ClassNotFoundException e1) {
							e1.printStackTrace();
						}
			     }
			    
							    
				
			}

			}
		
			
			public class Sair implements ActionListener {
				public void actionPerformed(ActionEvent e) {
					
					System.exit(1);
					
				}
			}
			
	
}
sandro.ci02

Não testei mas isso deve resolver.

faz o mesmo com a senha.

:slight_smile:

public class jLogin extends JFrame {
	
	
        JTextField jTextUsuario;

	public jLogin() {
			super("Janela de Login");
			this.setResizable(false);
			setLayout(null);
			setDefaultCloseOperation(EXIT_ON_CLOSE);
			
			Point centro = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
			int largJanela = 300;
			int altJanela = 190;
			setBounds(centro.x - largJanela / 2, centro.y - altJanela / 2, largJanela, altJanela);			
			
			Font f = new Font("Arial",Font.BOLD,14);
			Font fPreencher = new Font("Arial",Font.LAYOUT_LEFT_TO_RIGHT,14);
			
			JLabel areaDeLogin = new JLabel("Área de Login");
			areaDeLogin.setFont(f);
			areaDeLogin.setBounds(100, 15, 100, 20);			
			add(areaDeLogin);
			
			JLabel usuario = new JLabel("Usuario");
			usuario.setFont(f);
			usuario.setBounds(15, 55, 80, 20);			
			add(usuario);
							
			jTextUsuario = new JTextField();
			jTextUsuario.setBounds(80, 55, 200, 20);
			jTextUsuario.setFont(fPreencher);
			add(jTextUsuario);
			
			JLabel senha = new JLabel("Senha");
			senha.setFont(f);
			senha.setBounds(15, 85, 60, 20);			
			add(senha);
			
			JPasswordField jpassSenha = new JPasswordField();
			jpassSenha.setBounds(80, 85, 200, 20);
			jpassSenha.setFont(fPreencher);
			add(jpassSenha);
			
			
			
			Entrar entrar = new Entrar();
			
			JButton bEntrar = new JButton("Entrar");
			bEntrar.setFont(f);
			bEntrar.setBounds(50, 120, 90, 25);
			bEntrar.addActionListener(entrar);
			add(bEntrar);
						
			Sair sair = new Sair();
			
			JButton bSair = new JButton("Sair");
			bSair.setFont(f);
			bSair.setBounds(160, 120, 90, 25);
			bSair.addActionListener(sair);
			add(bSair);
			
			ImageIcon img = new ImageIcon("C:\\RFID Daxsys\\Imagens\\fundoJanelaUsuarios.png");
		    JLabel jImagemFundo = new JLabel(img);
		    jImagemFundo.setBounds(0, 0,500,500);
		    add(jImagemFundo);
			setVisible(true);
				
			
			
			
		}
		
		

		public class Entrar implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				String sUsuario = jTextUsuario.getText(); 
				
				
				 Connection conn = null;
			     String teste = "SELECT * FROM `operador` WHERE `Usuario` LIKE '"+sUsuario+"' AND `Senha` LIKE '"+sSenha+"'"; {
			     System.out.println("user:"+sUsuario);

			        try {
			            Class.forName("com.mysql.jdbc.Driver");
			            conn = DriverManager.getConnection( "jdbc:mysql://localhost/dbrfid?user=root" );
			            Statement stm = conn.createStatement();  
			            ResultSet rs = stm.executeQuery(teste);
			            String user = rs.getString("Usuario");
			            String senha = rs.getString("Senha");
			            if (sUsuario.equals(user)){
			            	if (sSenha.equals(senha)){
			            		dispose();
								janela principal = new janela();
			            	}else {
								System.exit(1);
			            	}
			            }else{
							System.exit(1);
			            }
			            }catch (SQLException e1){
			            	System.out.println("SQL Exception... Erro na consulta:");
			                e1.printStackTrace();
			        } catch (ClassNotFoundException e1) {
							e1.printStackTrace();
						}
			     }
			    
							    
				
			}

			}
		
			
			public class Sair implements ActionListener {
				public void actionPerformed(ActionEvent e) {
					
					System.exit(1);
					
				}
			}
			
	
}
H3nrique

Srs.,
Peguei o codigo acima emprestado e fiz algumas alterações, porém esta dando erro em “String user = rs.getString(“Usuario”); String pass = rs.getString(“Senha”);” e exibe a mensagem “java.sql.SQLException: Before start of result set”

public static boolean usuarioCorreto(String sUsuario, String sSenha) throws UnsupportedEncodingException {
        Connection conn = null;
        String teste = "SELECT * FROM fer_soft_users WHERE Usuario ='" + sUsuario + "' AND Senha ='" + sSenha + "'";
        {
            try {
                Class.forName("com.mysql.jdbc.Driver");
                conn = DriverManager.getConnection("jdbc:mysql://localhost/fernandes", "root", "");
                Statement stm = conn.createStatement();
                ResultSet rs = stm.executeQuery(teste);
                String user = rs.getString("Usuario");
                String pass = rs.getString("Senha");
                if (sUsuario.equals(user)) {
                    if (sSenha.equals(pass)) {
                        return true;
                    } else {
                        return false;
                    }
                } else {
                    return false;
                }
            } catch (SQLException e1) {
                System.out.println(e1);
                return false;
            } catch (ClassNotFoundException e2) {
                System.out.println(e2);
                return false;
            }
        }
    }

Alguém poderia esclarecer o que acontece?

Thanks…

=== UPDATE
Não sei o que aconteceu acima, mas consegui solucionar o meu problema com o código abaixo (é um pog, mas deixo aqui caso venha se útil para alguém).

public static boolean usuarioCorreto(String sUsuario, String sSenha) throws UnsupportedEncodingException {
        Connection conn = null;
        String teste = "SELECT * FROM fer_soft_users WHERE Usuario ='" + sUsuario + "' AND Senha ='" + sSenha + "'";
        {
            try {
                Class.forName("com.mysql.jdbc.Driver");
                conn = DriverManager.getConnection("jdbc:mysql://localhost/fernandes", "root", "");
                Statement stm = conn.createStatement();
                ResultSet rs = stm.executeQuery(teste);
                if (rs.next()) {
                    return true;
                } else {
                    return false;
                }
            } catch (SQLException e1) {
                System.out.println(e1);
                return false;
            } catch (ClassNotFoundException e2) {
                System.out.println(e2);
                return false;
            }
        }
    }
ViniGodoy

Pare de usar Statemente e use PreparedStatement.

Ou então, seu sistema vai dar pau se o usuário inserir um usuário ou senha com apóstrofe (como “John’s”). Sem falar que você fica sujeito ao ataque de SQL Injection.
Usar o preparedStatament é simples. Veja o que alteraria no seu código:

PreparedStatement stm = conn.prepareStatement("SELECT * FROM fer_soft_users WHERE Usuario = ? AND Senha = ?"); stm.setString(1, sUsuario); stm.setString(2, sSenha); ResultSet rs = stm.executeQuery();

Criado 4 de maio de 2010
Ultima resposta 9 de ago. de 2010
Respostas 5
Participantes 4