Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Leonardo Lovato

Java RESOLVIDO Validar dois logins iguais no banco (MySQL)

Recommended Posts

Postado (editado)

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!

Editado por Leonardo Lovato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia @Leonardo Lovato

 

Na teoria você teria que dar um "select" no banco buscando se aquele "nome de usuário" já está cadastrado e dependendo do retorno da query "select" você mostraria essa mensagem na tela ou não.

 

Espero ter lhe ajudado :D 

Compartilhar este post


Link para o post
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...

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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);
                }
            }
        }
    }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 minutos atrás, Leonardo Lovato disse:

JOptionPane.showMessageDialog(null, "Preencha todos os campos obrigatórios.");

 

Esse que não está aparecendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@Leonardo0308 Não, é 

                JOptionPane.showMessageDialog(null, "Login já cadastrado.");


Que está no método verificarLogin()
 

Editado por Leonardo Lovato

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Leonardo0308 Então, ele não deixa inserir porque no banco está como chave unica, mas ele nao paresenta o erro que digitei no JOptionPane... 

O sistema apresenta esse erro:

1.JPG.e38b2cafd2db61d71cb2d349339e7231.JPG

Compartilhar este post


Link para o post
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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

Então man, coloquei, mas ele da um erro, informando que eu preciso colocar um return, olha:

1.JPG.1c85d921a0eaea87b455d7f55198f818.JPG

 

Ele pede pra pra colocar o return no lugar que sinalizei, olha:

2.JPG.41477abd9fdcd1a7b501bccab5862e78.JPG

 

Ai ele para de dar o erro... 

Editado por Leonardo Lovato
  • Curtir 1

Compartilhar este post


Link para o post
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.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele printou o select 

select usuario from tbusuarios where usuario = ?

:lol:

Compartilhar este post


Link para o post
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? 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

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...

Editado por Leonardo0308

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Leonardo0308 Nesse ultimo codigo ele me mostrou o que eu digitei no campo "txtUsuLogin" :huh:

 

Desculpa a demora, aqui no serviço ta um caos, rs.

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×