intcodCadastro=345;try(Connectioncon=ConnectionFactory.getNewConnection();PreparedStatementps;ResultSetrs;){Stringsql="select * from cadastro where id = ?";ps=con.prepareStatement(sql);ps.setInteger(1,codCadastro);rs=ps.executeQuery();if(rs.next()){//....}}catch(Exceptione){}
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?
diego_qmota
As vezes eu tenho um bloco de código para executar antes de inicializá-los, como esse no exemplo:
Stringsql="select * from cadastro where id = ?";ps=con.prepareStatement(sql);ps.setInteger(1,codCadastro);//o bloco acima deve ser executado antes de iniciar o ResultSetrs=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, “([telefone removido]”); 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 ( … )?
diego_qmota
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