Tela de login utilizando mysql

11 respostas
wamarra

olá pessoal,

Estou tentando criar uma tela de login utilizando um JFrame e banco de dados mysql, mas só cai na exceção.
Se alguém poder me ajuda fico agradecido.
Segue abaixo o trecho de codigo…

private void fazerLogin(java.awt.event.ActionEvent evt) { try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/gerpro"; String usuario = "root"; String senha = "admin"; Connection con; con = DriverManager.getConnection(url, usuario, senha); Statement st = con.createStatement(); ResultSet rs = st.executeQuery("SELECT (login, senha, departamento)FROM cadastro WHERE " + "login='"+cxTxtCadLogin.getText()+"' AND senha='"+cxTxtCadSenha.getPassword()+"' AND " + "departamento='"+comboCadDepartamento.getSelectedItem()+"'"); while (rs.next()) if ((cxTxtLogLogin.getText().equals(rs.getString("login")))&& (cxTxtLogSenha.getPassword().equals(rs.getString("senha")))&& (comboLogDepartamento.getSelectedItem().equals(rs.getString("departamento")))); login.dispose(); }catch (ClassNotFoundException e){ JOptionPane.showMessageDialog(null, "Falha na conexão com o banco de dados.\n" + e.getMessage()); e.printStackTrace(); }catch (SQLException e){ JOptionPane.showMessageDialog(null, "Login Incorreto.\n" + "Tente novamente.\n","Mensagem do Programa", JOptionPane.ERROR_MESSAGE); e.printStackTrace(); } }

valeu galera!

Wesley Marra

11 Respostas

furutani

Olá

Qual é a exceção?

diego2005

Só uma dica. Não use Statement, use PreparedStatement pra não ter que ficar fazendo concatenação.

Como o furutani falou, poste o erro que está dando…

T+

wamarra

Olá furutani,

Tinha um erro no codigo “erro de execução”, pois coloquei um “;” na condição do “if”.
Só que agora quando aperto o botão OK não cai na exceção, mas também não acontece nada, como se não tivesse codigo algum.

Caso consiga identificar algum outro erro, por favor me mande.

Valeu!

Wesley Marra

wamarra

olá diego2005,

Só uma dica. Não use Statement, use PreparedStatement pra não ter que ficar fazendo concatenação.

Valeu a dica.
vou tentar o que me falou, caso dê certo eu posto aqui.

Abraço

Wesley Marra

diego2005

Com PreparedStatement você trocaria:

Statement st = con.createStatement();   
ResultSet rs = st.executeQuery("SELECT (login, senha, departamento)FROM cadastro WHERE " +   
                  "login='"+cxTxtCadLogin.getText()+"' AND senha='"+cxTxtCadSenha.getPassword()+"' AND " +   
                  "departamento='"+comboCadDepartamento.getSelectedItem()+"'");

por:

PreparedStatement st = con.prepareStatement("SELECT login, senha, departamento FROM cadastro WHERE login = ? AND senha = ? AND departamento = ?");

st.setString(1, cxTxtCadLogin.getText());
st.setString(2, cxTxtCadSenha.getPassword());
st.setString(3, comboCadDepartamento.getSelectedItem());

ResultSet rs = st.executeQuery();

Espero que ajude...

T+

wamarra

Boa tarde diego2005,

Estou tentando fazer o que me falou, não sei se estou fazendo o correto, pois está dando "erro de compilação" na linha:

ps.setString(2, cxTxtLogSenha.getPassword());

Sendo que tambem tive que alterar o conteúdo do combo "comboLogDepartamento.getSelectedItem()" para uma String conforme a linha:

ps.setString(3, (String) comboLogDepartamento.getSelectedItem());
Ao qual não sei se fiz o correto. segue abaixo o codigo com as alterações. Caso possa me ajuda, ficarei eternamente grato.
private void fazerLogin(java.awt.event.ActionEvent evt) {                            
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/gerpro";
            String usuario = "root";
            String senha = "admin";
            Connection con;
            con = DriverManager.getConnection(url, usuario, senha);
            PreparedStatement ps = con.prepareStatement("SELECT login, senha, departamento FROM cadastro WHERE " +
                   "login ='"+ cxTxtLogLogin.getText()+"' AND senha ='"+cxTxtLogSenha.getPassword()+"'AND " +
                   "departamento ='"+comboLogDepartamento.getSelectedItem()+"'");   
  
            ps.setString(1, cxTxtLogLogin.getText());   
            ps.setString(2, cxTxtLogSenha.getPassword(cxTxtLogSenha));   
            ps.setString(3, (String) comboLogDepartamento.getSelectedItem());   
  
            ResultSet rs = ps.executeQuery();
            
            }catch (ClassNotFoundException e){
                JOptionPane.showMessageDialog(null, "Falha na conexão com o banco de dados.\n" + e.getMessage());
                    e.printStackTrace();
            }catch (SQLException e){
                JOptionPane.showMessageDialog(null, "Login Incorreto.\n" +
                        "Tente novamente.\n","Mensagem do Programa", JOptionPane.ERROR_MESSAGE);
                            e.printStackTrace();
        }
    }

Abraços

Wesley Marra

diego2005

Com PreparedStatement você não precisa fazer:

basta fazer:

Qual o erro que está dando???

T+

wamarra

OK!
Testei das duas maneira, mas mesmo assim, coninua dando erro.

Qual o erro que está dando???

Está dando o seguinte erro…
setString (int, java.lang.String) in Java.sql.PreparedStatement Cannot be applied to (int, char[])
na linha…

Cara, muito obrigado novamente.

Wesley Marra

diego2005

Troque a linha:

por:

T+

wamarra
Bom, meu codigo agora está assim:
private void fazerLogin(java.awt.event.ActionEvent evt) {                            
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/gerpro";
            String usuario = "root";
            String senha = "admin";
            Connection con;
            con = DriverManager.getConnection(url, usuario, senha);
            PreparedStatement ps = con.prepareStatement("SELECT login, senha, departamento FROM cadastro WHERE " +
                   "login = ?  AND senha = ? AND departamento = ? ");   
  
            ps.setString(1, cxTxtLogLogin.getText());   
            ps.setString(2, String.valueOf(cxTxtLogSenha.getPassword()));   
            ps.setString(3, (String) comboLogDepartamento.getSelectedItem());   
  
            ResultSet rs = ps.executeQuery();
            
            if (rs.next())
                login.dispose();
            else
                JOptionPane.showMessageDialog(null, "Login Incorreto.\n" +
                        "Tente novamente.\n","Mensagem do Programa", JOptionPane.ERROR_MESSAGE);
            }catch (ClassNotFoundException e){
                JOptionPane.showMessageDialog(null, "Falha na conexão com o banco de dados.\n" + e.getMessage());
                    e.printStackTrace();
            }catch (SQLException e){
                    e.printStackTrace();
        }
    }

Mas somente o "else" é executado independente do que digito nos campos
O que será que está errado ainda?
Caso consiga identificar, desde já agradeço.

E novamente agradeço muito a força, pois estou perdendo o juizo nesta parte do código.

Abraço

anderson_lr

Wesley, você já tento executar essa query no banco de dados pra ver se retorna alguma coisa?

Criado 28 de outubro de 2007
Ultima resposta 14 de set. de 2012
Respostas 11
Participantes 4