ResultSet

4 respostas
C

Oi… será que alguem pode me apontar o erro disto aqui???

private boolean deleteSessoesDaProgramacao(long idProgramacao) throws SQLException{

String sql = delete from tb_sessao where id_sessao = ?;

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.next()){
       	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;
}

Qdo executo este código aparece uma mensagem de erro (“Before strar the ResulSet”

o que estou fazendo de errado???

=/

4 Respostas

cristianomariano

Cara, coloca seu código entre as tags code daqui do forum.
E também posta a Exception que é lançada, pra gente entender melhor o problema.
Abraço.

GustavoTavone

Kra ta meio dificil de entender, mais vo tentar te ajudar.

PreparedStatement stmt1 = this.connection.prepareStatement(sql1);
stmt1.setLong(1,idProgramacao);
ResultSet rs = stmt1.executeQuery();

acredito que poderia ser isso:

try{
   Statement stm1 = connection.createStatement();
   ResultSet  rs      = stm1.executeQuery(sql1) ;
   int contador = 0;
   if (rs.next()){
      contador = rs.getInt(1);
    }
}catch(SqlException ex){
  ex.printStackTrace();
}

statement e resultset —&gt usar para pesquisa
preparedstatement —&gt usar para insert, delete e update

espero ter ajudado

ViniGodoy

Estranho, realmente não parece haver nada de errado.

Você pode sim usar PreparedStatements em querys de select. Entretanto, isso só fica mais rápido se você fizer várias querys seguidas. Não deve ser esse o seu problema.

Uma dica, você tem alguns ifs que podem ser mehorados. Ao invés de

if(stmt.executeUpdate()&gt0){ 
   retorno = true; 
}else{ 
   retorno = false; 
}

Você pode substituir por:

retorno = stmt.executeUpdate()&gt0;

Também notei que você não está fechando o seu Statement dentro de um bloco finally. Isso é problemático, pois seu código não fechará o statement caso uma exceção ocorra. Usando o statement dentro de um finally, você também pode eliminar totalmente a variável retorno, usando return diretamente.

Seu código, com todas essas modificações, ficaria parecido com isso:

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

   PreparedStatement stmt1 = null;
   PreparedStatement stmt2 = null;
   ResultSet rs = null;
   try {
      PreparedStatement stmt1 = this.connection.prepareStatement(sql); 
      stmt1.setLong(1,idProgramacao); 
      ResultSet rs = stmt1.executeQuery(); 

      if(rs.next()){ 
         String sql2 = "UPDATE tb_sessao SET ic_ativo = 'N' WHERE id_programacao = ?";
         stmt2 = this.connection.prepareStatement(sql2); 
         stmt2.setLong(1,idProgramacao); 
         return stmt2.executeUpdate() &gt 0;
      }
 
      String sql2 = "DELETE FROM tb_sessao WHERE id_sessao = ?"; 
      stmt2 = this.connection.prepareStatement(sql2); 
      stmt.setLong(1, idProgramacao); 
      return stmt.executeUpdate()&gt0; 
   } finally {
      if (rs != null)
         rs.close(); 
      if (stmt1 != null)
         stmt1.close(); 
      if (stmt2 != null)
         stmt2.close();
   } 
}

Entretanto, nada disso é solução do seu problema. O melhor mesmo é você postar aqui a exceção. De preferência, mostrando para nós em que linha dá o erro.

E sempre que postar código, use as tags code. :wink:

C

Oii gente… poxa brigadão… consegui fazer funcionar aqui… realmente não tinha nada de errado, apenas reiniciei a máquina… e tudo deu certo…

Ahhh e na próxima vez coloco o código dentro da tags…

Valeuuuu

Criado 14 de fevereiro de 2007
Ultima resposta 15 de fev. de 2007
Respostas 4
Participantes 4