Aplicação java com conexão ao banco trava

6 respostas
P

Pessoal, tenho uma aplicação java para desktop que faz uma conexão ao banco de dados de 1 em 1 segundo e recolhe informações do mesmo. O problema é que do nada essa conexão congela. As vezes volta, as vezes precisa fechar e tentar conectar novamente. Coloquei o último conector java (5.1.24) para mysql mas ainda sim trava.

O Código da classe que acessa ao banco:
public ArrayList<String> dados_cliente (String agente, String ip) {
   
      try{   
         String str_conn = "jdbc:mysql://" + ip + ":3306/" + banco; //URL de conexão 
         Class.forName(driver);
         Connection conn = DriverManager.getConnection(str_conn, usuario, senha);
         java.sql.Statement stmt = conn.createStatement();
         sql = "SELECT id_cliente_crm, destino, cliente, id_preditivo, envio_virtua  FROM active_calls where status= 'Up' and campanha != 'Chamada_Discador_Ypy' and agente = '" + agente + "'";
         ResultSet rs = stmt.executeQuery(sql);
         String id=null, cliente=null, destino=null, id_preditivo=null, envio_virtua=null; //uniqueid=null;
         if (rs.next()){
            id = rs.getString("id_cliente_crm");
            destino = rs.getString("destino");
               if (destino.length() == 12){
                  destino = destino.substring(2);
               }   
            cliente = rs.getString("cliente");
            id_preditivo = rs.getString("id_preditivo");
            envio_virtua = rs.getString("envio_virtua");
            //uniqueid= rs.getString("uniquueid");
         }
         retorna = new ArrayList<String>();
         retorna.add(id);
         retorna.add(destino);
         retorna.add(cliente);
         retorna.add(id_preditivo);
         retorna.add(envio_virtua);
         //retorna.add(uniqueid);
         conn.close();
         stmt.close();
         rs.close();
         return retorna;
      }  
      catch (ClassNotFoundException ex){
         System.out.println("Não foi possível carregar o driver.");
         ex.printStackTrace();
         return null;
      }
      catch (SQLException ex){
         System.out.println("Problema com o SQL");
         JOptionPane.showMessageDialog(null, "Problema na consulta CLIENTE","", JOptionPane.ERROR_MESSAGE);
         ex.printStackTrace();
         return null;
      }
   }

6 Respostas

T

Você verificou a quntidade de conexões com o banco e tempo de resposta cada chamada?

De 1 em 1 seg. pode ficar lento (eu acho) dependendo da consulta.

A

Necessaritamente tem que reconectar ? Não dá pra pensar em conectar uma só vez e a cada ciclo de tempo apenas executar a consulta e retornar o resultado ?

E

De fato, para esse tipo de aplicação (em que você faz uma consulta periódica), o ideal é você manter uma conexão sempre aberta. Se, por algum motivo (digamos que alguém tenha reiniciado a máquina do banco de dados), a conexão cair, você espera um pouco e reabre a conexão.

P

ToBack:
Você verificou a quntidade de conexões com o banco e tempo de resposta cada chamada?

De 1 em 1 seg. pode ficar lento (eu acho) dependendo da consulta.

Sim, depende da quantidade de pessoas usando a aplicação, em média 20 pessoas usando o banco fica o tempo todo com uma média de 10 conexões.

P

Não. No caso seria uma conexão constante pra cada host que utilizar a aplicação, correto? Não sei como fazer.

P

Ninguém mais?

Criado 12 de abril de 2013
Ultima resposta 15 de abr. de 2013
Respostas 6
Participantes 4