[RESOLVIDO]Não rodar enquanto não tiver conexao com o BD

9 respostas
snowblacksoul

Galera seguinte preciso fazer um sistema, que enquanto nao tiver conexao com o banco de dados ele nao executa o que está abaixo no código.
O sistema será reniciado todos os dias , comecei a fazer mas sem sucesso, alguém poderia dar uma ajuda…
grato a todos e estou colocando o que comecei a fazer

public class Conexao {
    
    private static ResultSet rs;
    private static int mss;
    private static String msg;
    private static String mm;
    private static boolean pp;
    private static int i;
    
    public static void main(String[] args) throws ClassNotFoundException, InterruptedException {
        
        try{

              Class.forName("oracle.jdbc.OracleDriver");
                Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","system","admin");
                System.out.println("conectado");
                
                  java.sql.PreparedStatement stt = connection.prepareStatement("select * from system.status_minutos ORDER BY DT_PROCESSO DESC");
                  
                  ResultSet rt = stt.executeQuery();
                  while(rt.next()){
                      mss = rt.getInt("dt_processo");
                System.out.println("Data de Processamento : "+mss);
                
                mm = Integer.toString(mss);
                
                  }
                  for(i=0; i>10; i++){
                    //while(!msg.equals(mm)){
                       System.out.println("Aguardando 5 segundos...");
                Thread.sleep(5000);
                    pp =(false);
                  }   
                
        
        }catch(SQLException e){
            for(i=0; i<20; i++){
                System.out.println("Aguardando 5 segundos...");
                Thread.sleep(5000);
                    pp =(false);
                  } 
            JOptionPane.showMessageDialog(null, "SQLException : "+e);
        }
    }
    
}

9 Respostas

nel

Oi!

O SQLException não é algo conhecido em termos de erro. Pode ser a falta de uma vírgula na sua String SQL ou até mesmo a conexão, que é o que você precisa. Acredito que a Thread.sleep() possa vir a ser uma boa alternativa, mas o seu método deveria fazer apenas a conexão e mais nada, algo como:

private static Connection conn = null; public synchronized static Connection getConnection() { try { Class.forName("oracle.jdbc.OracleDriver"); conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","system","admin"); return conn; } catch (ClassNotFoundException e) { // faz algo return null; } catch (SQLException e) { // 10 s Thread.sleep(10000); return getConnection(); } }

snowblacksoul

Fale Nel…

Cara tentei fazer dessa forma , mas está dando erro
“ilegal start of expression”

public class Conexao {
    
    private static ResultSet rs;
    private static int mss;
    private static String msg;
    private static String mm;
    private static boolean pp;
    private static int i;
    private static Connection conn = null;  
    
    public static void main(String[] args) throws ClassNotFoundException, InterruptedException {
 
       public synchronized static Connection getConnection() { 
            try {  
                Class.forName("oracle.jdbc.OracleDriver");     
                    conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","system","admin");     
                } catch (ClassNotFoundException e) {  
                // faz algo  
                return null;  
               } catch (SQLException e) {  
            // 10 s  
          Thread.sleep(10000);  
           return getConnection();  
      }  
  }
 }
}
nel

Acho que faltou '}'.
Cuide ao apenas copiar e colar, podemos esquecer detalhes.

Faça assim o seu teste colega e não da forma que fez:

public static void main(String[] args) {
		try {
			Connection conn = getConnection();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
    public synchronized static Connection getConnection() throws InterruptedException {   
        try {     
            Class.forName("oracle.jdbc.OracleDriver");       
           	conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","system","admin");
           	return conn;
        } catch (ClassNotFoundException e) {     
            // faz algo     
        	return null;     
        } catch (SQLException e) {     
        	// 10 s     
        	System.out.println("Aguardando 10 segundos...");
        	Thread.sleep(10000);     
        	return getConnection();
        }
    }
snowblacksoul

Nel deu certinho cara muito obrigado, valeu mesmo!!!
abraços

snowblacksoul

Nel, se pudesse me ajudar nisso ficaria muito grato.
seguinte estou fazendo uma classe que verifica se o dia cair no domingo ela tem que esperar até segunda feira
se cair num sabado ela tem que esperar até segunda feira, sei que tenho que colocar uma Threads.sleep();

Mas não estou conseguindo colocar, pode me ajudar!?
public class FirstDayofWeek {
    
    public static void main(String[] args) throws InterruptedException {      

           Date d = new Date();  
            Calendar c = new GregorianCalendar();  
            c.setTime(d);  
            String nome = "";  
            int dia = c.get(c.DAY_OF_WEEK);  
            switch(dia){  
                case Calendar.SUNDAY:
                 nome = "Domingo";
                // JOptionPane.showMessageDialog(null, "Domingo o banco não funciona.....");
                 while(nome == "Domingo"){
                     System.out.println("Aguardando 5 segundos...");
                Thread.sleep(5000);
                 nome = ("Segunda");
                 }
                 
                System.exit(0);
              break;  
          case Calendar.SATURDAY: 
              nome = "sábado";
                JOptionPane.showMessageDialog(null, "Domingo o banco não funciona.....");
                System.exit(0);
              break;  
              default:
                   String comando = "C:\\teste\\arquivo.zip"; 
                try{ 
                    Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+comando); 
                    }catch (IOException e){
                        JOptionPane.showMessageDialog(null, "Domingo o banco não funciona.....");
                    }
                  break;
             
        }  

    }
}
nel

O correto não seria emitir uma mensagem ao usuário informando que o sistema está off sábado e domingo ?
Usar o Thread.sleep() para esse caso, é inaproriado, você não acha ?

Senão a cada x tempo o sistema verifica se já não é segunda.
O ideal era verificar somente quando solicitado pelo usuário .

snowblacksoul

Pois é grande eu concordo plenamente com você, só que o filha de uma mãe do DBA rsrsrs
disse que o banco que esta no servidor , nao funciona aos finais de semana, sendo que a aplicação deve acorrrer em dias já definidos
tipo dia 7, 10, 13, 16, 19 , 22, 25, 28 , 2 , 4
se algum desses dias cair num sabado por exemplo ficaria num sleep até segunda-feira
se caisse num domingo a mesma coisa.

nel

snowblacksoul:
Pois é grande eu concordo plenamente com você, só que o filha de uma mãe do DBA rsrsrs
disse que o banco que esta no servidor , nao funciona aos finais de semana, sendo que a aplicação deve acorrrer em dias já definidos
tipo dia 7, 10, 13, 16, 19 , 22, 25, 28 , 2 , 4
se algum desses dias cair num sabado por exemplo ficaria num sleep até segunda-feira
se caisse num domingo a mesma coisa.

Deixa esse tópico fechado, com o Resolvido.
Abre um novo e expõe a sua necessidade e explica um pouco melhor isso que tu acabou de dizer.

Ai eu e com certeza mais pessoas iremos verificar e sugerir algo.
Não esqueça de postar o que tu já fez em código, senão vão achar que tu quer algo pronto sem ter feito nada.

snowblacksoul

Valeu Nel

Criado 22 de setembro de 2011
Ultima resposta 22 de set. de 2011
Respostas 9
Participantes 2