Erro: Before start of result set

5 respostas
C

Oii pessoal, estou com um probleminha… tenho o seguinte código:

private boolean deleteSessoesDaProgramacao(long idProgramacao) throws SQLException{
        String sql = "delete from tb_sessao where id_programacao = ?";
    	String sql1 = "SELECT count(*) FROM tb_sessao s, tb_bilhete b WHERE "
    	+ "b.id_sessao = s.id_sessao AND s.id_programacao = ?"; // Retorna 0 se não tiver nenhum bilhete vendido

        PreparedStatement stmt1 = this.connection.prepareStatement(sql1);
        stmt1.setLong(1,idProgramacao);
        ResultSet rs = stmt1.executeQuery();
        boolean retorno;
        if(rs.getLong(1) != 0){
           	PreparedStatement stmt2 = this.connection.prepareStatement("UPDATE tb_sessao SET " 
          	+ "ic_ativo = 'N' WHERE id_programacao = ?");
            stmt2.setLong(1,idProgramacao);

            if (stmt2.executeUpdate() > 0){
            	retorno = true;
            } else {
                retorno = false;
            }
                stmt2.close();
            	
        } else {
            PreparedStatement stmt = this.connection.prepareStatement(sql);
            stmt.setLong(1, idProgramacao);
            	if(stmt.executeUpdate()>0){
            		retorno = true;
            	}else{
            		retorno = false;
            	}
            stmt.close();
        }
            
            rs.close();
            stmt1.close();
            return retorno;
	}

Bom neste código caso o valor do count seja maior que 0 ele executa uma alteração caso não ele apaga o registro… porem… não funciona fiz o tratamento do erro e aparece a msg

Before star of result set

Alguem tem alguma sugestão?? O que eu fiz de errado ? =/

5 Respostas

Romeo

Então, o ResultSet precisa q vc indique a linha para pegar o dado.

Utilize:
rs.next() ou res.first() pra assim funcionar

ResultSet rs = stmt1.executeQuery();

boolean retorno;

rs.first();

if(rs.getLong(1) != 0){
C

Romeo:
Então, o ResultSet precisa q vc indique a linha para pegar o dado.

Utilize:
rs.next() ou res.first() pra assim funcionar

ResultSet rs = stmt1.executeQuery();

boolean retorno;

rs.first();

if(rs.getLong(1) != 0){</blockquote>

Tentei isto, mas nao funcionou aqui =/ continua com o mesmo erro…

Romeo

Vc usa [color=darkred]this [/color] para abrir a conexão, será q esta pegando o parametro certo?

Só por teste, tenta fazer isso

Connection conexao = DriverManager.getConnection(url, usuario, senha);//substitui pelas sua strings de conexão…

PreparedStatement stmt1 = this.connection.prepareStatement(sql1);

stmt1.setLong(1,idProgramacao);

ResultSet rs = stmt1.executeQuery();

boolean retorno;

if(rs.next()){

//continua o seu programa aqui, pq a query retornou resultado

}

else System.out.println(Não há resultado);
//e implemente um catch, pois eu não gosto de usar throws

Ex:

try{

tudo que esta acima

}

catch(SQLException e){

e.printStackTrace();

}
C

Romeo:
Vc usa [color=darkred]this [/color] para abrir a conexão, será q esta pegando o parametro certo?

Só por teste, tenta fazer isso

Connection conexao = DriverManager.getConnection(url, usuario, senha);//substitui pelas sua strings de conexão…

PreparedStatement stmt1 = this.connection.prepareStatement(sql1);

stmt1.setLong(1,idProgramacao);

ResultSet rs = stmt1.executeQuery();

boolean retorno;

if(rs.next()){

//continua o seu programa aqui, pq a query retornou resultado

}

else System.out.println(Não há resultado);
//e implemente um catch, pois eu não gosto de usar throws

Ex:

try{

tudo que esta acima

}

catch(SQLException e){

e.printStackTrace();

}

</blockquote>

Oii fiz os testes aqui e tudo certo… Agora esta acontecendo um outro erro =/ ele nao esta indo para o excluir direto, em todos os casos ele apenas altera a programação

C

Romeo valeu as dicas…

Resolvido o problema… apenas inverti a ordem…

Coloquei = 0 ele apaga e diferente de zero ele faz a alteração e udo funcionou…

brigadão…

=)

Criado 2 de março de 2007
Ultima resposta 2 de mar. de 2007
Respostas 5
Participantes 2