Retorna dados DAO

9 respostas
rafaelrodrigues1607

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;  
     }

9 Respostas

Hebert_Coelho

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

Criado 11 de junho de 2012
Ultima resposta 12 de jun. de 2012
Respostas 9
Participantes 3