Eu estou com uma aplicação que possui duas tabelas especificas relacionadas.
Uma tem uma chave estrangeira da outra.
Logo, quando tento deletar um registro de uma tabela que tem uma referencia em outra, o mysql não permite.
Então, como eu capturo essa situação para enviar uma mensagem para o usuário?!
Como o pessoal falou acima o CASCADE pode te ajudar caso você queria que quando excluir da tabela principal apague também os dados relacionados, mas caso você queria realizar um tratamento, aconselho a você dar uma olhada na hierarquia de classes de SQLException, assim vai conseguir saber quando uma exceção é lançada e o tipo de erro que gerou, como por exemplo erros relacionados a foreign key.
[quote=RenatoDeSouza]… Quer dizer, eu tentei capturar da maneira básica
}catch(SQLException sqlException){
…
}…[/quote]@RenatoDeSouza oi,
Caso vc ainda não tenha conseguido, vc poderia tentar (a IDE q vc usa ó o Eclipse?) fazer o seguinte:
Retire sua operação de Banco do bloco Try Catch;
O Eclipse vai “reclamar” de alguma coisa;
(não tente solucionar manualmente, pelo contrario: )Utilize a ferramenta do Eclise q gera o tratamento automaticamente para vc.
Bem, p/ex.: num projeto q eu estou, q usa o Hibernate Template do Spring, ela sempre me gera isto:
} catch (DataAccessResourceFailureException e) {
Logger.getLogger(PedidoDaoImpl.class.getName() ).log(Level.SEVERE, null, e);
throw new Exception("\nFalha em PedidoDaoImpl.recuperarPedidosSolicitadosPelo(): " + e.getMessage() );
} catch (HibernateException e) {
Logger.getLogger(PedidoDaoImpl.class.getName() ).log(Level.SEVERE, null, e);
throw new Exception("\nFalha em PedidoDaoImpl.recuperarPedidosSolicitadosPelo(): " + e.getMessage() );
} catch (IllegalStateException e) {
Logger.getLogger(PedidoDaoImpl.class.getName() ).log(Level.SEVERE, null, e);
throw new Exception("\nFalha em PedidoDaoImpl.recuperarPedidosSolicitadosPelo(): " + e.getMessage() );
}
Se entendi bem você está usando JDBC (e não hibernate) e quer saber quando uma FK foi violada, correto?
A principio não tem como, pois o JDBC é muito genérico, e tudos os métodos lançam uma SQLException genérica. Não há, por exemplo, uma ViolationException extends SQLException.
O que você pode fazer é a partir da mensagem na SQLException saber qual o erro aconteceu. Por exemplo, se você receber uma SQLException com a mensagem “Operation violates the xxxx constraint”, basta você ler a mensagem e tratar ela.
Pois é Garcia, eu tentei fazer isso, tratar a mensagem!
Mas, o SQLException não gera nenhuma mensagem de FK violada…
Pelo menos ate agora não descobri!