Conexão com banco de dados

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?

:?: :?: :?:

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 {
      // ...
   }
}

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

Meu código:

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

Na linha

   [code] catch(MySQLIntegrityConstraintViolationException e) {[/code]

fica aparecendo esse erro.

O que eu faço?

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

Meu código:

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

Na linha

   [code] catch(MySQLIntegrityConstraintViolationException e) {[/code]

fica aparecendo esse erro.

O que eu faço?[/quote]
esse try-catch deve estar no método onde você faz a inserção do aluno (um DAO?).

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

[aaaaa]

Vou enlouquecer!

[quote=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?

:?: :?: :?: [/quote]

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.

[quote=drsmachado][quote=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?

:?: :?: :?: [/quote]

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.[/quote]

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