Dúvida téorica basicona, mas…
trecho do meu código:
try{
Connection conexao = DAOManager.getNovaConexao();
//codigo com preparedstatement e etc...
conexao.close();
}
catch (Exception e){
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
[quote=tnaires]Ela não é fechada automaticamente nesse caso. Use um bloco finally para isso.
Abraços[/quote]
valeu cara, dúvida respondida.
minha preocupação era dá um erro e ficar conexões abertas de bobeira.
TKS
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 :
Connection conexao=null;
try {
try{
conexao = DAOManager.getNovaConexao();
//codigo com preparedstatement e etc...
} finally {
if (conexao!=null){
conexao.close();
}
}
} catch (SQLException e){
// trata ou encapsula para lançar de novo
}
ou
Connection conexao=null;
try{
conexao = DAOManager.getNovaConexao();
//codigo com preparedstatement e etc...
} catch (SQLException e){
// trata ou encapsula para lançar de novo
} finally {
if (conexao!=null){
try {
conexao.close();
} catch (SQLException e){
// trata ou encapsula para lançar de novo
}
}
}
A primeira forma é usada quando o erro no fechamento impossibilita o método.
A segudna forma, quando não.
Valeu cara, provavelmente vou criar um metodo só para fechar as conexoes ![:slight_smile: :slight_smile:](https://www.guj.com.br/images/emoji/twitter/slight_smile.png?v=9)
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… ![:wink: :wink:](https://www.guj.com.br/images/emoji/twitter/wink.png?v=9)
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.
Lamento desiludi-lo mas não ha muita magina nesse conceito não ![:wink: :wink:](https://www.guj.com.br/images/emoji/twitter/wink.png?v=9)
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.
[quote=sergiotaborda]
Lamento desiludi-lo mas não ha muita magina nesse conceito não ![:wink: :wink:](https://www.guj.com.br/images/emoji/twitter/wink.png?v=9)
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.[/quote]
Sérgio, valeu mesmo todos os esclarecimentos :thumbup:
tks