Java MySQL?

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 :

public void logar() {
              
        try {
       conexaoBD Conecta = new conexaoBD();
       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 (SQLException e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }

jcvilanova, nessa linha

troque por

Avisa se funcionou.

Abraço

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…

public void logar() {
    try {
        conexaoBD Conecta = new conexaoBD();
        Conecta.conecta();

        String sql = "select * from usuarios where login=? and senha=?";

        PreparedStatement pstm = Conecta.conexao.prepareStatement(sql);
        pstm.setString(1, usuario.getText());
        pstm.setString(2, senha.getText());

        ResultSet rs = pstm.executeQuery();
        boolean usuarioLogado = 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 (SQLException e) {
        JOptionPane.showMessageDialog(null, e);
    }
}

Outra coisa a se atentar, se seu campo de senha é um JPasswordField, não use getText, use getPassword…

pstm.setString(2, String.valueOf(senha.getPassword()));

Galera, deu certinho. Obrigado. Agora seria possível explicar o que tava errado ?

Outra coisa nesse projeto, eu tenho apanhado muito em algumas coisas, mas tenho tentado aprender de verdade. Tenho um formulário de cadastro de Estados, onde consegui colocar pra funcionar os botões, com exceção do Botao Alterar. Novo, Salvar, Excluir, todos estão funcionando, mas incrivelmente o Botao Alterar não dá erro, porem, não causa qualquer modificação. Agora, fiz mais ou menos como vocês disseram no problema anterior, mas não ta dando certo.
O código do Botão que estou usando é:
try {
conexaoBD Conecta = new conexaoBD();
Conecta.conecta();
String sql = “update estados set codigo_uf=?, nome_uf=? and sigla_uf=? where codigo_uf=?”;
PreparedStatement pstm = Conecta.conexao.prepareStatement(sql);// Conecta.executeSQL(“select * from usuarios”);// where login="+usuario.getText()+“and senha=”+senha.getText());
pstm.setString(1, nome.getText());
pstm.setString(2, sigla.getText());
pstm.setInt(3, Integer.parseInt(codigo.getText()));
ResultSet rs = pstm.executeUpdate();
boolean usuariologado = rs.next();
rs.close();
pstm.close();

         JOptionPane.showMessageDialog(null, "Alteração realizada com sucesso");
     } catch(SQLException erro) {
         JOptionPane.showMessageDialog(null, erro);
     } 
}

O que tem de errado ? Fiz igual ao botão de Login

Essas linhas são desnecessárias para esse caso…

ResultSet rs = pstm.executeUpdate();
boolean usuariologado = rs.next();
rs.close();

Além do mais, o método executeUpdate() retorna um int

O exemplo que te mostrei seria para consulta, por isso o método executeQuery() retorna um ResultSet…

Sugiro você se aprofundar em orientação a objetos…

Outra coisa, sempre leia a documentação da classe que vai usar, os métodos dispoínveis, seus tipos de retorno, tipos de parâmetros, etc…

https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html

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…

pode me dizer como resolvo nesse caso específico ? o que devo mudar ai ?

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.

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…

Dei uma lida aqui no que você mandou, fiz as alterações e funcionou.
Obrigado pela dica