Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Varias Exception em catch

Minha duvida e a seguinte, quando temos um código com mais de uma exception, qual o melhor modelo utilizar, o multi catch, ou varios catch cada um com sua exception ?


try {
            con = new ConexaoFactory().getConnection();
            pst = con.prepareStatement(sql);
            rs = pst.executeQuery();
        } catch (ClassNotFoundException | SQLException e) {
            new ClassCastException("Conexão com a base de dados não iniciada.");
            new SQLException("Banco de dados não respondeu como esperado.");
        } finally {
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

e o que e o e.printStackTrace(); ?

try {
            con = new ConexaoFactory().getConnection();
            pst = con.prepareStatement(sql);
            rs = pst.executeQuery();
        } catch (ClassNotFoundException e) {
            new ClassCastException("Conexão com a base de dados não iniciada.");
        } catch (SQLException e) {
            new SQLException("Banco de dados não respondeu como esperado.");
        } finally {
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
2 respostas

Oi João, tudo bem ?

Acredito que seja melhor você utilizar o segundo caso, pois você sabe exatamente qual é o erro que está dando e você pode tomar conta de uma forma melhor, ou seja, realmente cuidar daquela exception.

Referente ao método printStackTrace(); ele serve para exibir qual é mensagem da Exception

Espero ter deixado mais claro.

Abraços

solução!

Fala aí, João! Tudo certo, cara? =)

Essa é uma excelente pergunta! Rs... Vamos lá!

Quando seu código pode lançar mais de uma Exception, você tem duas abordagens possíveis: 1. Tratar todas as exceções da mesma forma; 2. Tratar cada exceção de forma distinta.

Se você optar pela primeira forma, não tem problema nenhum! Vai depender bastante da forma como sua regra de negócio está modelada! No seu caso, só tome um cuidado:

new ClassCastException("Conexão com a base de dados não iniciada.");
new SQLException("Banco de dados não respondeu como esperado.");

O código acima foi o que você colocou dentro do catch de exceções... Acredito que a SQLException não chega a ser lançada. Uma vez feito um throw de Exception, se não me engano, a execução do programa é interrompida ali!

Na segunda opção, ou seja, tratando cada exceção de forma distinta, você consegue ser um pouco mais claro com relação a cada Exception, pois você lançará uma específica para cada erro, com uma mensagem específica para cada erro, também, sacou? =)

Então, na minha opinião, a segunda maneira de se realizar esse tratamento parece ser um pouco melhor. =)

Sobre sua segunda dúvida: O que é e.printStackTrace()?

Stack Trace é todo o "caminho" de exceções que foram lançadas. Quando você chama o método printStackTrace() de uma Exception, você está pedindo para ser impresso todo o caminho que foi feito para o lançamento de uma exceção, entendeu? =)

Espero que tenha conseguido ajudá-lo e tirado suas dúvidas, mas caso ainda haja alguma não hesite em perguntar aqui, no fórum, para que possamos continuar ajudando-o! Beleza? =)

Abraço e bons estudos,

Fábio