Dúvida lançamento de exceções

3 respostas
A

Tenho uma dúvida meio tosca… bom seguinte, tenho esse seguinte trecho de código:

public String inserirTipoConsumo(TipoConsumo tipoConsumo) throws Exception{ String msg = null; Connection con = null; PreparedStatement ps = null; try { con = dataSource.getConnection(); String sql = "INSERT INTO tipoConsumo (tipo_cons) VALUES (?)"; ps = con.prepareStatement(sql); ps.setString(1, tipoConsumo.getTcons_tipo()); ps.execute(); msg = "Sucesso na Inserção"; } catch (Exception e) { e.printStackTrace(); throw e; } finally { try { if (ps != null) //ele somente fecha o statement se ele for diferente de nulo, entao tem q fazer essa valida��o ps.close(); if (con != null) //mesm coisa pra conexao con.close(); } catch (SQLException e) { e.printStackTrace(); } //catch obrigatorio pois pode ocorrer uma exce��o } return msg;

Bom no meu catch tem um THROW e, qual o intuito é lançar a excessão pra frente pra avisar os métodos do view que teve uma exceção e exibir uma mensagem na tela… mas notem que existe um finally para fechar conexão no banco. Então minha dúvida é seguinte, se ele causar uma exceção, ele entra no catch e no finally? ou por causa do throw e, ele não entraria no finally e minha conexão estaria aberta?

3 Respostas

pmlm

Mesmo com throw ou return o finally é executado.

Giovani_Fiori

o finaly é executado em qualquer ocasião,

independente se o try deu certo ou quantos catch forem executados, antes de encerrar a execução do try catch ele vai executar o finally por ultimo.

Balena

finally sempre será executado em qualquer circunstância.

Não é necessário um novo bloco try dentro do finally, se você executou o try, ele lançando a exceção ou não a ps estará aberta, entrou no try e precisa ser fechada…

Também não precisa de validação alguma, o método que encerra a conexão tratará disso, basta o finally desta forma:

finally{ ps.close(); conn.close(); }

Criado 26 de novembro de 2010
Ultima resposta 26 de nov. de 2010
Respostas 3
Participantes 4