Bom dia!
Eu posso fazer assim no JAVA 7?
int codCadastro = 345;
try (Connection con = ConnectionFactory.getNewConnection();
PreparedStatement ps;
ResultSet rs; ) {
String sql = "select * from cadastro where id = ?";
ps = con.prepareStatement(sql);
ps.setInteger(1, codCadastro);
rs = ps.executeQuery();
if (rs.next()) {
//....
}
} catch (Exception e) {
}
Ou seja, declarar objetos que quero fechar no try, sem inicializá-los dentro do mesmo? (vide os objetos rs e ps).
Gostaria de saber porquê eu acabo setando os demais objetos dentro do try…[/quote]
vc nao pode fazer isso, os objetos devem ser inicializados sempre dentro do try. e lembrando que o try nao eh um metodo e nunca vai receber parametros.
So uma duvida, porque vc nao quer inicializa-los dentro do try?
As vezes eu tenho um bloco de código para executar antes de inicializá-los, como esse no exemplo:
String sql = "select * from cadastro where id = ?";
ps = con.prepareStatement(sql);
ps.setInteger(1, codCadastro);
//o bloco acima deve ser executado antes de iniciar o ResultSet
rs = ps.executeQuery();
Esse exemplo é bem vago, mas às vezes tenho que completar a query sql ou realizar validações antes da consulta, e com isso vai 4…6…8 ou mais linhas de código antes de ps = con.prepareStatement(sql);
Ou preciso setar vários parâmetros no PreparedStatement antes de iniciar um ResultSet: ps.setInteger(1, 2569); ps.setString(2, “(11) 3636-5689”); ps.setString(3, “Abreu de Almeida”); …
Ou seja, tenho uma certa quantidade de código intermediário antes de iniciar cada objeto…
Como eu faria? Iria ter que executar todo o código intermediário dentro do try ( … )?
Ok… achei que aquele tópico estava “morto”, porquê a última mensagem foi em 2010…
Daí criei um novo tópico.
Acho que o try with aninhado resolveria melhor o problema, no caso de ter muitas instruções intermediárias. Obrigado
Favor não duplicar sua pergunta.
Você fez o mesmo questionamento em Java 7: Try-with-resources ou Automatic Resource Management
Você pode, como alternativa, aninhar os try-with-resource.