Tela de login utilizando mysql

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

Olá

Qual é a exceção?

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+

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

olá diego2005,

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

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

Abraço

Wesley Marra

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:

[code]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();[/code]

Espero que ajude…

T+

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:

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

Ao qual não sei se fiz o correto.

segue abaixo o codigo com as alterações.
Caso possa me ajuda, ficarei eternamente grato.

[code] 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();
    }
}[/code]

Abraços

Wesley Marra

Com PreparedStatement você não precisa fazer:

basta fazer:

Qual o erro que está dando???

T+

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

[quote]Qual o erro que está dando???
[/quote]
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

Troque a linha:

por:

T+

Bom, meu codigo agora está assim:

[code] 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();
    }
}[/code]

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

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