Pessoal, estou fazendo uma pesquisa usando o método abaixo. Mas quando chega no rs.next() não entra dentro do while. Já testei essa query no banco e está certa. Alguma idéia do que pode ser...?
public PeriodoChuvoso recuperaPeridoChuvosoPorEstacao(int estacao) throws SQLException {
PreparedStatement stmt = this.connection.prepareStatement("SELECT * FROM PERIODO_CHUVOSO WHERE ESTACAO="+estacao);
ResultSet rs = stmt.executeQuery();
PeriodoChuvoso periodoChuvoso = new PeriodoChuvoso();
//List<PeriodoChuvoso> list = new ArrayList<PeriodoChuvoso>();
while (rs.next()){
periodoChuvoso.setMesInicio(rs.getInt("MES_INICIO"));
periodoChuvoso.setMesFim(rs.getInt("MES_FIM"));
periodoChuvoso.setEstacao(rs.getInt("ESTACAO"));
//list.add(periodoChuvoso);
}
rs.close();
stmt.close();
return periodoChuvoso;
}
Essa query está com o valor correto?
SELECT * FROM PERIODO_CHUVOSO WHERE ESTACAO="+estacao
o id da estacao esta indo corretamente?
rafaelrodrigues1607
Debuguei e está vindo exatamente assim:
Coloquei esse sql no banco e trouxe corretamente.
drsmachado
Uma dúvida: se está utilizando PreparedStatement, por que define a variável direto na query e não como um parâmetro do objeto stmt?
rafaelrodrigues1607
Eu sempre fiz dessa forma(passando como parametro). Inclusive tenho outros aplicativos que estão com essa mesma estrutura e estão funcionando normalmente. Não sei o que está acontecendo… É como se dentro do ResultSet não tivesse nada.
drsmachado
Então use Statement, já que não usa um dos recursos mais adequados do preparedstatement.
Gosto é gosto, enfim.
Sim, se ele não entra no while, é por que rs.next() == false.
Possibilidades:
1 - Há apenas um registro e, antes de entrar no while é chamado um rs.first() ou mesmo rs.next() (não sei se o código postado ali é o que está em uso aí).
2 - O query estar malformada (o valor de estacao é String (varchar, no banco) e está sendo passado como numérico)
3 - Não há dados no banco
4 - 2012 e as teorias sobre o calendário maia estão certas.
rafaelrodrigues1607
Então é o item 1(O select está trazendo apenas um registro). O que devo fazer? O código é o que está postado aí.
rafaelrodrigues1607
Troquei o PrepareStatement pelo Statement, mas continua não entrando no rs.next().
public PeriodoChuvoso recuperaPeridoChuvosoPorEstacao(int estacao) throws SQLException {
String sql = "SELECT * FROM PERIODO_CHUVOSO WHERE ESTACAO="+estacao;
Statement stmt = this.connection.createStatement();
ResultSet rs = stmt.executeQuery(sql);
PeriodoChuvoso periodoChuvoso = new PeriodoChuvoso();
while (rs.next()){
periodoChuvoso.setMesInicio(rs.getInt("MES_INICIO"));
periodoChuvoso.setMesFim(rs.getInt("MES_FIM"));
periodoChuvoso.setEstacao(rs.getInt("ESTACAO"));
}
rs.close();
stmt.close();
return periodoChuvoso;
}
rafaelrodrigues1607
Aonde vejo no meu debug se o ResultSet está vazio?
rafaelrodrigues1607
Por algum motivo deve não estar trazendo dados, pois estou tomando o seguinte erro:
java.sql.SQLException: Conjunto de Resultados Esgotado