Unique MYSQL com Java SE - Dúvida

Olá pessoal!

Eu tenho uma tabela no MYSQL que em duas colunas eu alterei para serem do tipo UNIQUE.

Eu pretendo o seguinte com isso:
Capturar no JAVA SE o erro e informar ao usuário que o registro já existe.

Como vocês fazem isso?

Vou postar abaixo como eu montei, mas acredito que não é a melhor forma. No entanto vou continuar estudando p/ aprimorar esta dúvida.

Obrigado!

Meu método DAO:

 Atenção p/ a catch que coloquei.

No meu JInternalFrame ficou assim:

Veja o que acontece se eu tento cadastrar algo que já tenha no BD:

Está dando certo. Mas gostaria de ver com vocês como vocês fazem.

Obrigado!

Eu estou dando a minha opinião mais experiência: nesse caso em especifico você tem controle total da aplicação e pode antes de inserir o registro, verificar se o mesmo já existe, não havendo necessidade de um lançar uma exceção, somente a mensagem!

Gosto de trabalhar com exceção quando eu não tenho controle ao código, um exemplo: uma requisição em um servidor remoto, seria lógico fazer com exceção …! Tem vários exemplos, mas, acredito que isso possa te ajudar!

2 curtidas

vc precisa “mesmo” informar para o usuario q o q ele digitou já existe, vc pode fazer um Insert ignore na sua instrução sql assim o usuario pode ficar livre.

1 curtida

Outro ponto a observar, é que SQLException pode trazer qualquer tipo de erro (o banco pode ter parado por exemplo), ou seja, você teria que verificar no getMessage se encontra algo como unique para realmente confirmar que se trata de registro duplicado… isso dificulta a manutenção e força você incluir if’s dentro do catch… eu acho que não fica legal…

1 curtida

Lost entendi sua resposta e sei que de fato isso irá ocorrer.

Você sabe como tratar esta questão das duas colunas do tipo UNIQUE que tenho em minha tabela no banco de dados? Pois assim que o usuário tentar cadastrar algo que já exista no banco, “a unique entra em ação” e gera um erro ao Java. E como tratar esta exceção?

Eu não encontrei uma forma de pegar esta exceção do Banco e mostrar uma mensagem bacana ao usuário.

Entendeu?
Obrigado pela opinião!

Insert Ignore ?
Vou pesquisar sobre isso…
Mas de princípio, eu gostaria de informá-lo que os dados digitados já existe!

Cara, o mais comum é consultar o registro com select antes e dependendo da resposta você prosseque pegou?

É esse tipo de controle total que o @Dragoon comentou… na teoria qualquer exceção que acontecer não será por causa de duplicidade (afinal você já testou antes certo?) e você não precisa tratar…

A mensagem pro usuário pode ser esse JOptionPane mesmo, a diferença é que ele vai antes de executar o insert…

1 curtida

Lost entendi tudo.

Vou reavaliar por aqui e também usar um método que criei para pesquisar os dados já existentes no banco de dados.

Obrigado!

1 curtida