Ir ao conteúdo
  • Cadastre-se

Java Validar dois logins iguais no banco (MySQL)


Ir à solução Resolvido por Leonardo0308,

Posts recomendados

Bom dia galera!

Sou iniciante em programação (mais especificamente na linguagem Java) e estou fazendo um sistema de armazenamento para aprendizado.
Eu tenho uma tela de cadastro de usuários e gostaria de saber como eu valido dois logins iguais, ou seja, se alguém tentar cadastrar um login que já possui no banco, quero que exiba uma mensagem "Login já cadastrado". Provavelmente terei que criar um método só pra isso, certo ? 
Postarei o código do método adicionar, que adiciona um usuário no banco.
 

private void adicionar() {
        String sql = "insert into tbusuarios(iduser,usuario,login,senha,telefone,perfil,sexo) values(?,?,?,?,?,?,?)";
        try {
            pst = connection.prepareStatement(sql);
            pst.setString(1, txtUsuId.getText());
            pst.setString(2, txtUsuNome.getText());
            pst.setString(3, txtUsuLogin.getText());
            pst.setString(4, txtUsuSenha.getText());
            pst.setString(5, txtUsuFone.getText());
            pst.setString(6, cboUsuPerfil.getSelectedItem().toString());
            pst.setString(7, cboUsuSexo.getSelectedItem().toString());
        
            if ((txtUsuId.getText().isEmpty()) || (txtUsuNome.getText().isEmpty()) || 
               (txtUsuLogin.getText().isEmpty()) || (txtUsuSenha.getText().isEmpty()) || 
               (cboUsuPerfil.getSelectedIndex() == 0)) {
                JOptionPane.showMessageDialog(null, "Preencha todos os campos obrigatórios.");
            
             } else {

                // confirmar a inserção dos dados na tabela
                int adicionado = pst.executeUpdate();
                if (adicionado > 0) {
                    JOptionPane.showMessageDialog(null, "Usuário cadastrado com sucesso.");
                    txtUsuId.setText(null);
                    txtUsuNome.setText(null);
                    txtUsuFone.setText(null);
                    txtUsuLogin.setText(null);
                    txtUsuSenha.setText(null);
                    cboUsuSexo.setSelectedItem(null);
                    cboUsuPerfil.setSelectedItem(null);
                }
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }

Obrigado!

Link para o comentário
Compartilhar em outros sites

@Leonardo0308 Obrigado pela luz, xará!

Seria mais ou menos assim ?

private void verificarLogin(){
        String sql = "select usuario from tbusuarios";
        try {
            pst = connection.prepareStatement(sql);
            pst.setString(2, txtUsuLogin.getText());
            rs = pst.executeQuery();
            if(rs.next() == true){
                JOptionPane.showMessageDialog(null, "Login já cadastrado.");
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, e);
        }
    }

Desculpe a ignorância, estou aprendendo, rs...

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, Leonardo Lovato disse:

String sql = "select usuario from tbusuarios";

 

coloca um 

"select usuario from tbusuarios where usuario = ?"

Para você selecionar o usuário pelo where.

 

6 minutos atrás, Leonardo Lovato disse:

pst.setString(2, txtUsuLogin.getText());

 

No lugar do "2" acho que você vai ter que por "1" pois ele vai fazer referencia ao primeiro "?".

 

Olhando por cima o parece de boas.

 

4 minutos atrás, Leonardo Lovato disse:

Desculpe a ignorância, estou aprendendo

Relaxa cara, todos aqui estamos aprendendo kkkk

 

Depois posta aqui se essa solução funcionou ou caso tenha feito alguma modificação posta aqui também :D 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Cara, muito obrigado pela atenção, de verdade!
Eu crio o método verificarLogin() :

 private void verificarLogin(){
        String sql = "select usuario from tbusuarios where usuario = ?";
        try {
            pst = connection.prepareStatement(sql);
            pst.setString(1, txtUsuLogin.getText());
            rs = pst.executeQuery();
            if(rs.next() == true){
                JOptionPane.showMessageDialog(null, "Login já cadastrado.");
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, e);
        }
    }

Estou chamando ele no método adicionar(), ou seja, quando tento adicionar (cadastrar) um login, certo ? Estou chamando o método de verificarLogin() no else, olhe: 

 

private void adicionar() {
        String sql = "insert into tbusuarios(iduser,usuario,login,senha,telefone,perfil,sexo) values(?,?,?,?,?,?,?)";
        try {
            pst = connection.prepareStatement(sql);
            pst.setString(1, txtUsuId.getText());
            pst.setString(2, txtUsuNome.getText());
            pst.setString(3, txtUsuLogin.getText());
            pst.setString(4, txtUsuSenha.getText());
            pst.setString(5, txtUsuFone.getText());
            pst.setString(6, cboUsuPerfil.getSelectedItem().toString());
            pst.setString(7, cboUsuSexo.getSelectedItem().toString());
        
            if ((txtUsuId.getText().isEmpty()) || (txtUsuNome.getText().isEmpty()) || 
               (txtUsuLogin.getText().isEmpty()) || (txtUsuSenha.getText().isEmpty()) || 
               (cboUsuPerfil.getSelectedIndex() == 0)) {
                JOptionPane.showMessageDialog(null, "Preencha todos os campos obrigatórios.");

             }           
            else {
                                verificarLogin();
                // confirmar a inserção dos dados na tabela
                int adicionado = pst.executeUpdate();
                if (adicionado > 0) {
                    JOptionPane.showMessageDialog(null, "Usuário cadastrado com sucesso.");
                    txtUsuId.setText(null);
                    txtUsuNome.setText(null);
                    txtUsuFone.setText(null);
                    txtUsuLogin.setText(null);
                    txtUsuSenha.setText(null);
                    cboUsuSexo.setSelectedItem(null);
                    cboUsuPerfil.setSelectedItem(null);
                }
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }

porém, quando eu tento cadastrar duas pessoas com o mesmo login, o programa re retorna a seguinte exception:
"java.sql.SQLException: Can not executeUpdate() or executeLargeUpdate() for SELECTs"
Estou chamado ele no lugar errado ? Se eu chamo dentro do if ele nem valida.. :rezando:
Desculpe novamente, e obrigado pela atenção xará! :D

Link para o comentário
Compartilhar em outros sites

Olha na minha opinião o que você deveria fazer é o seguinte muda o método verificar login de  void para boolean e coloca assim

private boolean verificarLogin(){
        String sql = "select usuario from tbusuarios where usuario = ?";
        try {
            pst = connection.prepareStatement(sql);
            pst.setString(1, txtUsuLogin.getText());
            rs = pst.executeQuery();
            if(rs.next() == true){
                JOptionPane.showMessageDialog(null, "Login já cadastrado.");
              	return false;
            }
            else{
            	return true;
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, e);
        }
    }

assim ele vai retorna verdadeiro ou falso na função

 

e no adicionar() coloca essa função inteira dentro de um if com o método verificarLogin, algo assim

 

if(verificarLogin()){

(não esquece de tirar o verificarLogin do else do adicinar())

 

outra dica

 

12 minutos atrás, Leonardo Lovato disse:

if ((txtUsuId.getText().isEmpty()) || (txtUsuNome.getText().isEmpty()) || (txtUsuLogin.getText().isEmpty()) || (txtUsuSenha.getText().isEmpty()) || (cboUsuPerfil.getSelectedIndex() == 0)) { JOptionPane.showMessageDialog(null, "Preencha todos os campos obrigatórios."); }

 

esse cogido você poderia por antes de tudo e caso ele seja falso, faz as outras coisas inclusive o verificarLogin()

 

Espero que não tenha ficado muito confuso, mas tenta fazer e postar aqui de novo e qual quer coisa a gente vai corrigindo aos poucos :D 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Leonardo0308 Que isso mano! Você está ajudando demais, e com extrema clareza, até esta utilizando meu código :lol:

Eu que estou bem "cru" kkkkkk
Enfim mano, eu fiz isso mesmo que você disse, mas chamar somente o método verificarLogin() dentro do if já é o suficiente ?

Porque quando clico no botão pra adicionar ele não faz nada :huh:, parece que ele ta entrando no if e não está fazendo nada ...

 private void adicionar() {
        String sql = "insert into tbusuarios(iduser,usuario,login,senha,telefone,perfil,sexo) values(?,?,?,?,?,?,?)";
        try {
            pst = connection.prepareStatement(sql);
            pst.setString(1, txtUsuId.getText());
            pst.setString(2, txtUsuNome.getText());
            pst.setString(3, txtUsuLogin.getText());
            pst.setString(4, txtUsuSenha.getText());
            pst.setString(5, txtUsuFone.getText());
            pst.setString(6, cboUsuPerfil.getSelectedItem().toString());
            pst.setString(7, cboUsuSexo.getSelectedItem().toString());
        
            if ((txtUsuId.getText().isEmpty()) || (txtUsuNome.getText().isEmpty()) || 
               (txtUsuLogin.getText().isEmpty()) || (txtUsuSenha.getText().isEmpty()) || 
               (cboUsuPerfil.getSelectedIndex() == 0)) {
                JOptionPane.showMessageDialog(null, "Preencha todos os campos obrigatórios.");
             }           
            else if (verificarLogin()){
           
            } else{
                // confirmar a inserção dos dados na tabela
                int adicionado = pst.executeUpdate();
                if (adicionado > 0) {
                    JOptionPane.showMessageDialog(null, "Usuário cadastrado com sucesso.");
                    txtUsuId.setText(null);
                    txtUsuNome.setText(null);
                    txtUsuFone.setText(null);
                    txtUsuLogin.setText(null);
                    txtUsuSenha.setText(null);
                    cboUsuSexo.setSelectedItem(null);
                    cboUsuPerfil.setSelectedItem(null);
                }
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }

Cara, mais uma vez desculpe ficar sendo incomodo, chato, kkkkk ... Mas estou aprendendo! Valeu de coração!!! 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Acho que eu escrevi meu confuso kkkk vou te demonstrar o que eu tentei falar que é mais fácil

 

private void adicionar() {
	if ((txtUsuId.getText().isEmpty()) || (txtUsuNome.getText().isEmpty()) || 
	(txtUsuLogin.getText().isEmpty()) || (txtUsuSenha.getText().isEmpty()) || 
	(cboUsuPerfil.getSelectedIndex() == 0)) {
		JOptionPane.showMessageDialog(null, "Preencha todos os campos obrigatórios.");
	}
	else{
		if (verificarLogin()){

			String sql = "insert into tbusuarios(iduser,usuario,login,senha,telefone,perfil,sexo) values(?,?,?,?,?,?,?)";
			try {
				pst = connection.prepareStatement(sql);
				pst.setString(1, txtUsuId.getText());
				pst.setString(2, txtUsuNome.getText());
				pst.setString(3, txtUsuLogin.getText());
				pst.setString(4, txtUsuSenha.getText());
				pst.setString(5, txtUsuFone.getText());
				pst.setString(6, cboUsuPerfil.getSelectedItem().toString());
				pst.setString(7, cboUsuSexo.getSelectedItem().toString());

				// confirmar a inserção dos dados na tabela
				int adicionado = pst.executeUpdate();
				if (adicionado > 0) {
				JOptionPane.showMessageDialog(null, "Usuário cadastrado com sucesso.");
				txtUsuId.setText(null);
				txtUsuNome.setText(null);
				txtUsuFone.setText(null);
				txtUsuLogin.setText(null);
				txtUsuSenha.setText(null);
				cboUsuSexo.setSelectedItem(null);
				cboUsuPerfil.setSelectedItem(null);
        
			} catch (Exception e) {
				JOptionPane.showMessageDialog(null, e);
			}
		}
	}
}

 

Era essa logica que eu tinha tentado explicar :D

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Mano, fiz dessa forma que voce disse, mas ele não está apresentando a minha mensagem, ele lança a exception no banco como chave duplicada (normal), mas o meu JOptionPane.showMessageDialog() ele não apresenta, devo estar fazendo muita **********! :oops:

 

    private void adicionar() {

        if ((txtUsuId.getText().isEmpty()) || (txtUsuNome.getText().isEmpty())
                || (txtUsuLogin.getText().isEmpty()) || (txtUsuSenha.getText().isEmpty())
                || (cboUsuPerfil.getSelectedIndex() == 0)) {
            JOptionPane.showMessageDialog(null, "Preencha todos os campos obrigatórios.");
        } else {
            if (verificarLogin()) {

                String sql = "insert into tbusuarios(iduser,usuario,login,senha,telefone,perfil,sexo) values(?,?,?,?,?,?,?)";
                try {
                    pst = connection.prepareStatement(sql);
                    pst.setString(1, txtUsuId.getText());
                    pst.setString(2, txtUsuNome.getText());
                    pst.setString(3, txtUsuLogin.getText());
                    pst.setString(4, txtUsuSenha.getText());
                    pst.setString(5, txtUsuFone.getText());
                    pst.setString(6, cboUsuPerfil.getSelectedItem().toString());
                    pst.setString(7, cboUsuSexo.getSelectedItem().toString());

                    // confirmar a inserção dos dados na tabela
                    int adicionado = pst.executeUpdate();
                    if (adicionado > 0) {
                        JOptionPane.showMessageDialog(null, "Usuário cadastrado com sucesso.");
                        txtUsuId.setText(null);
                        txtUsuNome.setText(null);
                        txtUsuFone.setText(null);
                        txtUsuLogin.setText(null);
                        txtUsuSenha.setText(null);
                        cboUsuSexo.setSelectedItem(null);
                        cboUsuPerfil.setSelectedItem(null);

                    }
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, e);
                }
            }
        }
    }

 

Link para o comentário
Compartilhar em outros sites

Bem vamos fazer uns testes

 

private boolean verificarLogin(){
        String sql = "select usuario from tbusuarios where usuario = ?";
        try {
            pst = connection.prepareStatement(sql);
            pst.setString(1, txtUsuLogin.getText());
            rs = pst.executeQuery();
          	JOptionPane.showMessageDialog(null, "Estou sendo executado!");
            if(rs.next() == true){
                JOptionPane.showMessageDialog(null, "Login já cadastrado.");
              	return false;
            }
            else{
            	return true;
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, e);
        }
    }

coloca esse código no lugar do verificarLogin() e executa e me fala se a mensagem "estou sendo executado" aparece

 

Link para o comentário
Compartilhar em outros sites

Ótimo, agora vamos testar outra coisa

 

private boolean verificarLogin(){
        String sql = "select usuario from tbusuarios where usuario = ?";
        try {
            pst = connection.prepareStatement(sql);
            pst.setString(1, txtUsuLogin.getText());
            rs = pst.executeQuery();
          	JOptionPane.showMessageDialog(null, sql);
            if(rs.next() == true){
                JOptionPane.showMessageDialog(null, "Login já cadastrado.");
              	return false;
            }
            else{
            	return true;
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, e);
        }
  	return false;
    }

 

Agora me fala o que aparece na mensagem.

 

Link para o comentário
Compartilhar em outros sites

 

private boolean verificarLogin(){
        String sql = "select usuario from tbusuarios where usuario = ?";
        try {
            pst = connection.prepareStatement(sql);
            pst.setString(1, txtUsuLogin.getText());
            rs = pst.executeQuery();
          	JOptionPane.showMessageDialog(null, rs.getString("usuario"));
            if(rs.next() == true){
                JOptionPane.showMessageDialog(null, "Login já cadastrado.");
              	return false;
            }
            else{
            	return true;
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, e);
        }
  	return false;
    }

 

Executando com um nome de usuário repetido o que ele aparece? 

Link para o comentário
Compartilhar em outros sites

Relaxa também quero saber a resposta

 

private boolean verificarLogin(){
        String sql = "select usuario from tbusuarios where usuario = ?";
        try {
            pst = connection.prepareStatement(sql);
            pst.setString(1, txtUsuLogin.getText());
            rs = pst.executeQuery();
          	JOptionPane.showMessageDialog(null, txtUsuLogin.getText());
            if(rs.next() == true){
                JOptionPane.showMessageDialog(null, "Login já cadastrado.");
              	return false;
            }
            else{
            	return true;
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, e);
        }
  	return false;
    }

Já sabemos que esse sql não ta achando nenhum registro...agora vamos descobrir o por que...

Link para o comentário
Compartilhar em outros sites

private boolean verificarLogin(){
        String sql = "select usuario from tbusuarios where usuario = ?";
        try {
            pst = connection.prepareStatement(sql);
            pst.setString(1, txtUsuLogin.getText());
            rs = pst.executeQuery();
            if(rs.next()){
                JOptionPane.showMessageDialog(null, "Login já cadastrado.");
              	return false;
            }
            else{
            	return true;
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, e);
        }
  	return false;
    }

 

tenta assim e vê se funciona

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...