Olá, estou fazendo uma aplicação web, e em uma das classes, eu insiro dados numa tabela posgres, um dos campos dessa tabela é unique (login, no caso).
Quando o usuário insere um login que já existe na tabela, ele da um erro, porém, eu quero “modificar” a mensagem desse erro pra uma linguagem que um usuario comum entenda.
Ele me retorna falha na inserção em chave unique, eu quero só mostrar “usuario já cadastrado”.
eu faço o insert num try catch
public boolean insereAluno() {
boolean conseguiu = false;
int linhas=0;
String query = "insert into usuario (nome,usuario) values ('"+nomeUsuario+"','"+usuarioUsuario+")";
try {
linhas = statement.executeUpdate(query);
}
catch(Exception e) {JOptionPane.showMessageDialog(null,e);}
if(linhas>0) {
conseguiu = true;
}
return conseguiu;
}
Esse “e” do exception é “enorme”, ele que eu quero transformar em um aviso feito por mim
tem como ?
Claro que tem…
} catch(Exception e) {
JOptionPane.showMessageDialog(this,"Esta aparecendo esta mensagem de erro!","Título da jaela",JOptionPane.ERROR_MESSAGE);
}
veja os parametros 
o primeiro é o componente pai (se for uma gui coloque this), o segundo a msg… o teceiro é o titulo, o quarto é o tipo de mensagem (vai aparecer um icone de erro)
Não não amigo, colocar JOptionPane eu já coloco, mas o erro não é sempre o mesmo.
POR EXEMPLO tentar inserir um dado com 20 caracteres num campo varchar(10), ele retorna um erro
duplicidade de pk, outro erro
eu queria dar um nome “usual” pra cada erro
1 -) campo x muito grande
2 -) usuario já logado
O código que você postou tem várias pequenas falhas ou vulnerabilidades:
-
Concatenação de string para montar query sql, permitindo sql injection
-
Não desaloca corretamente os recursos do jdbc, permitindo leak de recursos.
-
Captura apenas a exception Exception, não permite visualizar o que deu errado (um NullPointerException ou um SqlException).
Um outro problema, é que mesmo se capturar um SqlException, qualquer erro no banco cairá nela.
Geralmente os drivers indicam o tipo de erro através de algum código de erro e não por um tipo de exception diferente.
Minhas recomendações para você nesse caso seriam:
-
Usar Hibernate que vai tirar várias dessas preocupações da sua cabeça.
-
Usar o JDBCTemplate do Spring, que permite controle direto do SQL mas também tira as dores de cabeça.
Se não puder usar nenhum desses por algum tipo de restrição, dá uma lida em como o JDBCTemplate funciona e faça de forma parecida…
Voce pode dar um if pra cada tipo de erro…e fazer assim:
if(e.getMessage.regex(“parte da mensage”)){
suaMensagemPersonalizada
}
Entendeu?
Espero ter ajudado.
É bem verdade isso, procure tratar da forma que eu disse mas somente as excessoes SQL…e tenha consciencia que tratar dessa forma que eu disse se voce mudar o driver Jdbc voce vai ter que refatorar, ja que nem todo driver lança a mesma mensagem.
Desculpa minha bola murcha 