Conexão com banco de dados

6 respostas
C

Bom, mais uma dúvida com meu sistema de biblioteca.

Dessa vez é que quando tento cadastrar um aluno que já foi cadastro, dá um erro no campo matrícula, que é chave primária e não pode estar duplicado.

Porém, a mensagem que aparece é essa:

Erro: Cadastro falhou!com.mysql.jdbc.exceptions.jdbc4.MYSQLIntegrityConstraintViolationException: Duplicate entry ‘2225’ for key “PRIMARY”

Então, o que eu queria saber é como deixar essa mensagem mais “bonitinha”.
Eu quero que quando isso acontecer apareça a mensagem: “O número de matrícula apresentado já está cadastrado!”

O que eu faço?

:?: :?: :?:

6 Respostas

adrielcafe

Tenta alguma dessas formas:

try{
   // Código...
} catch(MYSQLIntegrityConstraintViolationException e) {
   JOptionPane.showMessageDialog(this, "O número de matrícula apresentado já está cadastrado!", null, JOptionPane.ERROR_MESSAGE);
}

ou

try{
   // Código...
} catch(MYSQLIntegrityConstraintViolationException e) {
   if(e.getMessage().contains("Duplicate entry") && e.getMessage().contains("PRIMARY"){
      JOptionPane.showMessageDialog(this, "O número de matrícula apresentado já está cadastrado!", null, JOptionPane.ERROR_MESSAGE);
   } else {
      // ...
   }
}
C

Ok, mas como já tem uma exceção, fica dando erro, de que não possui um try correspondente.

Meu código:

try {

            String Smatricula = matricula.getText();
            if ( Smatricula.equals("") || Smatricula == null  ) {

                JOptionPane.showMessageDialog(null, "O campo MATRÍCULA não pode ser nulo!");
                return;
	}
            int Imatricula = Integer.parseInt(Smatricula);
            if (Imatricula>9999999){

                JOptionPane.showMessageDialog(null, "O campo MATRÍCULA não pode conter mais de 7 dígitos!");
                matricula.setText(null);
                return;
            }
            aluno.setMatricula(Imatricula);
        }
        
        catch(MySQLIntegrityConstraintViolationException e) {  
                JOptionPane.showMessageDialog(this, "O número de matrícula apresentado já está cadastrado!", null, JOptionPane.ERROR_MESSAGE);  
        }

        catch (NumberFormatException e){
                JOptionPane.showMessageDialog(null,"O campo MATRÍCULA deve conter apenas números!" );
                matricula.setText(null);
                return;
        }

Na linha

catch(MySQLIntegrityConstraintViolationException e) {

fica aparecendo esse erro.

O que eu faço?

wbdsjunior
CamilaBatista:
Ok, mas como já tem uma exceção, fica dando erro, de que não possui um try correspondente.

Meu código:

try {

            String Smatricula = matricula.getText();
            if ( Smatricula.equals("") || Smatricula == null  ) {

                JOptionPane.showMessageDialog(null, "O campo MATRÍCULA não pode ser nulo!");
                return;
	}
            int Imatricula = Integer.parseInt(Smatricula);
            if (Imatricula>9999999){

                JOptionPane.showMessageDialog(null, "O campo MATRÍCULA não pode conter mais de 7 dígitos!");
                matricula.setText(null);
                return;
            }
            aluno.setMatricula(Imatricula);
        }
        
        catch(MySQLIntegrityConstraintViolationException e) {  
                JOptionPane.showMessageDialog(this, "O número de matrícula apresentado já está cadastrado!", null, JOptionPane.ERROR_MESSAGE);  
        }

        catch (NumberFormatException e){
                JOptionPane.showMessageDialog(null,"O campo MATRÍCULA deve conter apenas números!" );
                matricula.setText(null);
                return;
        }

Na linha

catch(MySQLIntegrityConstraintViolationException e) {

fica aparecendo esse erro.

O que eu faço?


esse try-catch deve estar no método onde você faz a inserção do aluno (um DAO?).

C

Também já tentei isso!
Mesmo assim, aquela mensagem continua sendo mostrada. :roll:

[aaaaa]

Vou enlouquecer!

drsmachado

CamilaBatista:
Bom, mais uma dúvida com meu sistema de biblioteca.

Dessa vez é que quando tento cadastrar um aluno que já foi cadastro, dá um erro no campo matrícula, que é chave primária e não pode estar duplicado.

Porém, a mensagem que aparece é essa:

Erro: Cadastro falhou!com.mysql.jdbc.exceptions.jdbc4.MYSQLIntegrityConstraintViolationException: Duplicate entry ‘2225’ for key “PRIMARY”

Então, o que eu queria saber é como deixar essa mensagem mais “bonitinha”.
Eu quero que quando isso acontecer apareça a mensagem: “O número de matrícula apresentado já está cadastrado!”

O que eu faço?

:?: :?: :?:

Em primeiro lugar, Camila, esse erro só ocorrerá caso você deixe por conta do usuário informar a matrícula.
Na minha concepção, isso é um erro, visto que, imagine se o sistema está em uso há 3 anos e o funcionário é novo. Como ele irá saber qual número ainda não foi inserido para matrícula?
Sugiro alterar o banco e deixar a matrícula como PK e auto_increment (como está utilizando MySQL).
Assim, o próprio banco de dados se preocupa com este código e você apenas se preocupa em inserir e recuperar esta informação.

C

drsmachado:
CamilaBatista:
Bom, mais uma dúvida com meu sistema de biblioteca.

Dessa vez é que quando tento cadastrar um aluno que já foi cadastro, dá um erro no campo matrícula, que é chave primária e não pode estar duplicado.

Porém, a mensagem que aparece é essa:

Erro: Cadastro falhou!com.mysql.jdbc.exceptions.jdbc4.MYSQLIntegrityConstraintViolationException: Duplicate entry ‘2225’ for key “PRIMARY”

Então, o que eu queria saber é como deixar essa mensagem mais “bonitinha”.
Eu quero que quando isso acontecer apareça a mensagem: “O número de matrícula apresentado já está cadastrado!”

O que eu faço?

:?: :?: :?:

Em primeiro lugar, Camila, esse erro só ocorrerá caso você deixe por conta do usuário informar a matrícula.
Na minha concepção, isso é um erro, visto que, imagine se o sistema está em uso há 3 anos e o funcionário é novo. Como ele irá saber qual número ainda não foi inserido para matrícula?
Sugiro alterar o banco e deixar a matrícula como PK e auto_increment (como está utilizando MySQL).
Assim, o próprio banco de dados se preocupa com este código e você apenas se preocupa em inserir e recuperar esta informação.

Bom, mas eu estou fazendo assim, porque cada aluno da escola já tem um número de matrícula, que é utilizado também em outras outras aplicações, e então cada aluno já está acostumado a utilizar esse código de identificação. Esse número será utilizado por ele quando solicitar algum empréstimo. Então é mais fácil para ele lembrar da sua matrícula do que de um código novo, gerado pelo sistema.

Quem irá fazer o cadastro será a bibliotecária, mas no caso de um aluno “esquecer” que já se cadastrou e tentar novamente, o sistema apresentará esse erro.

É claro que não será um erro muito comum, mas eu gostaria de deixar mais claro para quem estará usando o sistema, no caso a bibliotecária, que não tem conhecimento algum sobre java ou banco de dados.

Eu vou sair da escola, e ela não terá quem consultar.

Por isso vou fazer assim.

Mas bem que eu queria fazer com auto_increment

Criado 5 de outubro de 2011
Ultima resposta 6 de out. de 2011
Respostas 6
Participantes 4