| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/07/2010 17:12:50
|
RenatoDeSouza
Entusiasta Java
![[Avatar]](/images/avatar/d65598b7a583ff113467d5b6f693a031.jpg)
Membro desde: 26/11/2007 14:32:01
Mensagens: 17
Offline
|
Pessoal, boa tarde.
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?!
This message was edited 1 time. Last update was at 03/07/2010 10:09:44
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/07/2010 17:26:56
|
deniswsrosa
GUJ Ranger
![[Avatar]](/images/avatar/28a7602724ba16600d5ccc644c19bf18.jpg)
Membro desde: 21/07/2005 08:51:27
Mensagens: 807
Offline
|
Procure por CASCADE no mysql.
|
SCJP, SCEA I
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/07/2010 17:37:34
|
aluisiodsv
JavaEvangelist
![[Avatar]](/images/avatar/27a766161775d1d3bfe4a298feef7b99.jpg)
Membro desde: 01/07/2010 17:28:24
Mensagens: 368
Offline
|
O Cascade só vai apagar tudo que referencia seu registro ao ser excluído.
O que vc precisa é aprender sobre tratamento de exeções.
Quando acontece isso é lançada uma exeção. É só saber capturá-la e tratá-la!
Valeu ? Ou precisa de algum tuto ?
Se precisar de algum tutorial no site da caelum tem um de java básico muuuito bom !
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/07/2010 18:08:29
|
cvinicius
JavaEvangelist
Membro desde: 18/04/2008 16:35:05
Mensagens: 433
Localização: SP
Offline
|
Boa tarde
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.
Dê uma olhada http://java.sun.com/javase/6/docs/api/java/sql/SQLException.html
Falou.
|
Sun Certified Java Programmer 5
Oracle Certified Associate, Java SE
Oracle Certified Professional Java EE 5 Web Component Developer |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/07/2010 10:29:46
|
RenatoDeSouza
Entusiasta Java
![[Avatar]](/images/avatar/d65598b7a583ff113467d5b6f693a031.jpg)
Membro desde: 26/11/2007 14:32:01
Mensagens: 17
Offline
|
Pois é pessoal, valeu pelas respostas!
Não é o Cascade que eu procuro!
Eu quero exatamente uma forma de tratar essa exceção, só que, o SQLException não lança essa exceção!
Quer dizer, eu tentei capturar da maneira básica
}catch(SQLException sqlException){
...
}
Se alguem souber como eu capturo essa exceção..
Obrigado!!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/07/2010 15:28:53
|
derlon
JavaTeenager
Membro desde: 12/12/2009 14:07:01
Mensagens: 150
Offline
|
RenatoDeSouza wrote:... Quer dizer, eu tentei capturar da maneira básica
}catch(SQLException sqlException){
...
}..
@RenatoDeSouza oi,
Caso vc ainda não tenha conseguido, vc poderia tentar (a IDE q vc usa ó o Eclipse?) fazer o seguinte:
1. Retire sua operação de Banco do bloco Try Catch;
2. O Eclipse vai "reclamar" de alguma coisa;
3. (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:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/07/2010 16:26:55
|
garcia-jj
JWizard
Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline
|
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.
|
http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/07/2010 18:07:40
|
RenatoDeSouza
Entusiasta Java
![[Avatar]](/images/avatar/d65598b7a583ff113467d5b6f693a031.jpg)
Membro desde: 26/11/2007 14:32:01
Mensagens: 17
Offline
|
Olá pessoal!
Isso, não estou usando Hibernate. To usando JDBC.
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!
Vou continuar tentando!
Valeu pessoal.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/07/2010 18:40:01
|
garcia-jj
JWizard
Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline
|
Qual o banco de dados que você usa? Você quer apenas saber se há uma violação de FK ou quer saber QUAL FK? No pgsql você precisa pegar a Exception.getRootCause para saber a mensagem real.
This message was edited 1 time. Last update was at 02/07/2010 18:40:28
|
http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/07/2010 18:46:10
|
RenatoDeSouza
Entusiasta Java
![[Avatar]](/images/avatar/d65598b7a583ff113467d5b6f693a031.jpg)
Membro desde: 26/11/2007 14:32:01
Mensagens: 17
Offline
|
Olá Garcia, obrigado pela resposta.
Quero saber só se existe uma violação de FK.
Nessa aplicação to usando o MySQL!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/07/2010 10:09:18
|
RenatoDeSouza
Entusiasta Java
![[Avatar]](/images/avatar/d65598b7a583ff113467d5b6f693a031.jpg)
Membro desde: 26/11/2007 14:32:01
Mensagens: 17
Offline
|
Tá resolvido o problema pessoal.
Esqueci de colocar o Throws SQLException no meu método que chamava o executeUpdate.
Valeu!
|
|
|
 |
|
|