estou mantendo uma aplicação que utiliza JDBC para acessar um banco de dados Firebird.
Sigo os passos comuns para acessar uma Store Procedure e executo o método statement.executeQuery(“query”) para isto.
O problema é que após executar a tal query nada acontece se eu não der um resultSet.next() no ResultSet retornado pelo método executeQuery;
Efetuei a mesma Store Procedure direto no banco e ela funciona.
Gostaria de saber se é necessário fazer esse .next() realmente…
Até onde eu entendo isto não deveria ser necessário.
Não incluí os try/catch aqui por uma questão de visualização…
Se eu retirar o passagem.next() não será efetuada a consulta sql na store procedure e não será atualizado os dados do banco.
T
thingol
É obrigatório usar o “next”. Só pensar no seguinte:
Um ResultSet é um objeto que contém o registro corrente de um conjunto de registros que foi obtido por uma query. Pode ser que esse conjunto seja vazio ou não.
Quando você cria o ResultSet, ele está vazio e sem o registro corrente. Para carregar o primeiro registro corrente, é obrigatório chamar o “next”. Isso lhe indica se o registro existe (porque “next” retornou “true”), e carrega o registro se ele existir.
Mesmo que seja o único registro que é resultado de uma stored procedure, por exemplo.
A
AndersonDias
O problema já foi resolvido seguindo as orientações acima.
Agora, continua a minha dúvida pois a execução da query devia er teoricamente independente da consulta dos resultados obtidos nela.
Tanto que utilizando o esquema indicado consegui o resultado esperado sem executar o .next() do result set.
Fica a discussão