1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Thread trava apos execução SQL

Pessoal, fiz uma Thread que utiliza uma conexão com o mysql, o unico problema é que a thread executa normalmente ate que ele encontra a condição verdadeira e entra no bloco com o codigo sql. Ele executa a instrução sql normalmente, mas para por ai, a Thread não segue rodando. Isso que esta me intrigando.



package auxiliar;

import beans.Conexao;
import telas.*;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *
 * @author Futepa
 */
public class AtualizarEstatusQuarto implements Runnable {

    @Override
    public void run() {

        try {
            while(true){
             Date hora = new Date(); //buscando hora do sistema
             SimpleDateFormat hf;
             hf = new SimpleDateFormat("HH:mm:ss");

             Date dia = new Date(); //buscando dia do sistema
             SimpleDateFormat df;
             df = new SimpleDateFormat("yyyy-MM-dd");

             if(hf.format(hora).equalsIgnoreCase("21:31:00")){ //verifica se a hora do sistema é igual 

         PreparedStatement stmt = Conexao.getConnection().prepareStatement("call alteraEstatusQuarto(?)");// stored procedure que esta funcionando, ja testei

          stmt.setString(1,df.format(dia));
          ResultSet rs = stmt.executeQuery();
          TelaPrincipal.preencherQuartos();

          rs.close();
              stmt.close();

             }

            System.out.println(hf.format(hora)+" "+df.format(dia));// serve para saber se ta rodando   
            Thread.sleep(1*1000);// dorme por 1 segundo

            }
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        } catch (SQLException ez) {
            ez.printStackTrace();
        }


    }


}
  • Concordo, com o que o Luiz descreve na resposta, porém observe que você chama a procedure e coloca a Thread para ficar inativa apenas por 1 segundo, não sei o que a sua procedure faz exatamente, mas nestes caso, o ideal seria aumentar o tempo de 1 segundo, coloca 1 minuto por exemplo para testar e ver se da certo. Você deve verificar no seu gerenciador de conexão com o BD se esta usando o finally, para evitar conexões abertas desnecessarimente.

    Aleksandro   27 de dez de 2013
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags threads sql stored-procedures ou faça a sua própria pergunta.