Olá a todos, estou com algumas duvidas acerca de exceção.
Minha primeira duvida é a seguinte:
Tenho um metodo que lança uma SQLException. Como eu faço para saber qual foi o motivo da exceção? Se foi chave primaria duplicada, se foi tabela nao encontrada, se foi violação de constraints, etc… preciso que seja exclusivamente da SQLException.
Minha segunda dúvida:
Como faço para pegar o texto que é imprimido na tela quando eu invoco o metodo printstackstrace()? Me refiro só pegar ele e guardar em String mas sem imprimir na tela.
[quote=Sem_Nome]Olá a todos, estou com algumas duvidas acerca de exceção.
Minha primeira duvida é a seguinte:
Tenho um metodo que lança uma SQLException. Como eu faço para saber qual foi o motivo da exceção? Se foi chave primaria duplicada, se foi tabela nao encontrada, se foi violação de constraints, etc… preciso que seja exclusivamente da SQLException.
Minha segunda dúvida:
Como faço para pegar o texto que é imprimido na tela quando eu invoco o metodo printstackstrace()? Me refiro só pegar ele e guardar em String mas sem imprimir na tela.
E a minha última dúvida:
Qual a diferença entre erro e exceção?[/quote]
Isso é impossível. SQLException não tem um motivo “claro”, portanto, não há como saber o que o ocorreu. Inclusive, muitos tratam essa exceção lançando em seguida uma RuntimeException. O máximo que podes fazer é tratar com catch e informar que algum erro ocorreu, mas dizer qual foi, não vai ter como. Pode até usar o getMessage(), mas isso não garante que irá imprimir o real motivo do erro.
Resumidamente, Error é algo de sistema, além da aplicação, mas que “quebra” a aplicação. A classe Error não tem subclasses.
Já Exception possui toda uma hierarquia de classes na API padrão do Java e você ainda pode criar as suas próprias Exceptions. O âmbito delas é justamente a aplicação e, por isso, podem ser tratadas com try-catch, throws, etc, para que a aplicação continue seu funcionamento normalmente.
Não sei se minha explicação ficou boa, mas se vc procurar por “java error exception difference” no Google vai ter várias explicações e muitas com certeza bem mais detalhadas.
Em relação a resposta do adornes para a minha segunda pergunta: o metodo printStrackTrace(PrintWriter pw) é void. Não tem como eu pegar aquele texto todo e guardar numa String?
[quote]printstackstrace(); este método não está obsoleto pelo menos quando você digita no NetBeans ele informa que deve ser removido.
[/quote]
No Eclipse, ele mesmo coloca o e.printStrackTrace quando ele gera o try e catch (usando o quick fix).
O NetBeans dá warning no printStackTrace(); porque este é considerado um comando apenas de debug. Ele só mostra a pilha de execução no console e tal.
Segundo a própria wiki do Netbeans o ideal é usar uma maneira mais robusta de log de erros. Mas não tem problema nenhum deixar ele não.
[quote=felipeaps]O NetBeans dá warning no printStackTrace(); porque este é considerado um comando apenas de debug. Ele só mostra a pilha de execução no console e tal.
Segundo a própria wiki do Netbeans o ideal é usar uma maneira mais robusta de log de erros. Mas não tem problema nenhum deixar ele não.