Result set is closed

Senhores,

Estou com um probleminha em aninhar duas queries como segue o codigo:

try { Statement stmt0 = conn.createStatement(); ResultSet rs0 = stmt0.executeQuery("select * from pessoa "); while (rs0.next()) { int id = rs0.getInt("id"); Statement stmt1 = conn.createStatement(); ResultSet rs1 = stmt0.executeQuery("select * from filhos where id_pessoa = "+id); while (rs1.next()) { System.out.println(rs1.getString("nome")); } } } catch (Exception e) { e.printStackTrace(); }

Quando ele vai rodar a 2o. iteracao ele diz que o ResultSet (rs0) está fechado:

org.firebirdsql.jdbc.FBSQLException: The result set is closed

Eu tirei todos os closes para testar e continua com problema. Se eu tirar a quere stmt1 funciona.
Onde estou comendo barriga?

Abraço

Se eu não me engano, a partir do momento em que você obtém o segundo resultset, ele automaticamente fecha o primeiro. Tente iterar o primeiro resultSet colocando os dados em uma Collection. Depois itere essa colection para fazer a segunda chamada ao banco.

Isso acontece por que você não pode reaproveitar o Statement pra fazer uma outra query sem fechar a query anterior. Quando você faz uma query com um Statement, o jdbc fecha o ResultSet relacionado com aquele Statement, isso se houver um, para gerar outro ResultSet. Você precisa criar mais de um Statement para manter o ResultSet anterior aberto.

Acho que não postei besteira

Inté

Nada a ver o que a galera postou aí, note que você está usando a variável stmt0 dentro do segundo loop quando na verdade deveria ser a stmt1.

o q foi postado anteriormente tah certo sim, pois só se pode utilizar uma vez só o resultSet, sendo que depois ele eh fechado automaticamente…

Entretanto o post anterior tb tah certo, pois vc tah usando o Statement errado.

:slight_smile: