[Resolvido]Dúvidas sobre exceção

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?

Fera, respondendo a primeira pergunta.

Toda Exception tem um getMessage(). O retorno desse método vai te dar essa informação.

Abraço

Respondendo a segunda pergunta:

StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);

[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.

Quanto à diferença entre Error e Exception.

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.

Forte abraço!

printstackstrace(); este método não está obsoleto :?: pelo menos quando você digita no NetBeans ele informa que deve ser removido.

:thumbup:

Obrigado a todos.

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.

Fonte: http://wiki.netbeans.org/Java_Hints

[quote=Sem_Nome]
o metodo printStrackTrace(PrintWriter pw) é void [/quote]

Fera, falha minha, esqueci de um detalhe importante. O String que você quer estará em sw.toString();

Forte abraço

[quote=adornes][quote=Sem_Nome]
o metodo printStrackTrace(PrintWriter pw) é void [/quote]

Fera, falha minha, esqueci de um detalhe importante. O String que você quer estará em sw.toString();

Forte abraço[/quote]

Certo. Obrigado a todos.

[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.

Fonte: http://wiki.netbeans.org/Java_Hints[/quote]

:thumbup: