Resolvido - Objeto Connection é fechado automaticamente numa exceção?
7 respostas
venomtotal
Dúvida téorica basicona, mas…
trecho do meu código:
try{Connectionconexao=DAOManager.getNovaConexao();//codigo com preparedstatement e etc... conexao.close();}catch(Exceptione){e.printStackTrace();}
Se ocorrer tudo bem, ele abre a conexao, executa o comando sql e fecha a conexao.
A questão é, se ocorrer algum erro no try(um erro na sentença sql, por exemplo, colocar “selct” em vez de “select”) é executado a exceção, mas a conexao é fechada ou devo fechá-la manualmente no catch?
Ela não é fechada automaticamente nesse caso. Use um bloco finally para isso.
Abraços
venomtotal
tnaires:
Ela não é fechada automaticamente nesse caso. Use um bloco finally para isso.
Abraços
valeu cara, dúvida respondida.
minha preocupação era dá um erro e ficar conexões abertas de bobeira.
TKS
sergiotaborda
Connexões são recursos caros. Vc deve assegurar que eles não ficam abertos por mais tempo que o necessário
e isso independentemente se aconteceu erro ou não.
A forma padrão de trabalhar com Connection é assim :
A primeira forma é usada quando o erro no fechamento impossibilita o método.
A segudna forma, quando não.
venomtotal
Valeu cara, provavelmente vou criar um metodo só para fechar as conexoes
Porém, saindo da parte prática e indo pra téorica…
O que seria na verdade uma conexao? Tá, pergunta óbvia… Dã… mas quero saber :oops: e porque elas seriam “recursos caros”? :?:
agradço a ajuda e a paciencia…
arec_metafora
Não sei se vocês sabem, mas o bloco finnaly é executado sempre, mas sempre mesmo, mesmo se tiver um return no bloco try :shock:! Por isso, fechar a conexão nele é essencial.
sergiotaborda
Lamento desiludi-lo mas não ha muita magina nesse conceito não
Conexão é isso mesmo, um ligação fisica entre o seu sistema e o banco através da rede.
É um recurso caro porque o numero de conexções abertas influencia na performance e o ato de a criar afeta coisas de baixo nivel (protocolos de rede ,etc…) e isso envolve consumir recursos do sistema além de memoria e processador. Por isso é caro, no sentido que envolve muitos recursos fisicos do sistema e da rede.
venomtotal
sergiotaborda:
Lamento desiludi-lo mas não ha muita magina nesse conceito não
Conexão é isso mesmo, um ligação fisica entre o seu sistema e o banco através da rede.
É um recurso caro porque o numero de conexções abertas influencia na performance e o ato de a criar afeta coisas de baixo nivel (protocolos de rede ,etc…) e isso envolve consumir recursos do sistema além de memoria e processador. Por isso é caro, no sentido que envolve muitos recursos fisicos do sistema e da rede.
Sérgio, valeu mesmo todos os esclarecimentos :thumbup: