2013-09-11 3 views
1

Это мое соединение Класс/Метод:MySQL подключения идеально первый раз, второй раз возвращает NullPointer

static Connection connection = null; 
     Statement stm = null; 

public static Connection getConexao() { 
      try { 
       // Carregando o JDBC Driver padrão 
       String driverName = "com.mysql.jdbc.Driver";       
       Class.forName(driverName); 
       // Configurando a nossa conexão com um banco de dados// 
       String serverName = "192.168.0.222"; //caminho do servidor do BD 
       String mydatabase ="bd";  //nome do seu banco de dados 
       String url = "jdbc:mysql://" + serverName + "/" + mydatabase; 
       String username = "user";  //nome de um usuário de seu BD   
       String password = "pass";  //sua senha de acesso 
       connection = DriverManager.getConnection(url, username, password); 
       return connection; 
      } catch (ClassNotFoundException e) { //Driver não encontrado 
       System.out.println("O driver expecificado nao foi encontrado."); 
       return null; 
      } catch (SQLException e) { 
       //Não conseguindo se conectar ao banco 
       System.out.println("Nao foi possivel conectar ao Banco de Dados."); 
       return null; 
      } 

    } 

метод, которые вызываются, когда TextField потерял фокус:

private void puxaemailsiscart(String servico) throws SQLException { 
       Connection conn = ConectaBD.getConexao(); 
       Statement stm = null; 
       ResultSet results = null; 
       stm = conn.createStatement(); 


            try { 
         System.out.println(); 
         results = stm.executeQuery ("SELECT * FROM " + servico + " WHERE protocolo =" + tfProtocolo.getText()); 
         if(results.next()) { 

         tfEmailParte.setText(results.getString("Email").toString()); 


         } else { 
          System.out.println("Protocolo nao encontrado"); 


         } 
         results.close(); 
         stm.close(); 
         conn.close(); 
.... 

Проблема заключается в том, в первый раз, когда TextField потерял фокус, он отлично работает и возвращает результат базы данных, но когда я помещаю фокус в текстовое поле и снова потерял фокус, соединение возвращает нуль, почему? так как шаги такие же, как в первый раз?

StackTrace

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at telaprincipal$3.puxaemailsiscart(telaprincipal.java:499) 
    at telaprincipal$3.focusLost(telaprincipal.java:482) 

Line 499: = Connection conn = ConectaBD.getConexao(); говорит, что здесь есть NullPoint, но почему?

+0

ли 'ConectaBD' экземпляр класса (объект) или сам класс? –

+1

Ваш метод getConexao возвращает значение null, если генерируется исключение (эффективно проглатывая исключение, не записывая его данные, я отмечаю), но вы используете возвращаемое значение независимо. –

+0

Вы получаете System.out.println («O драйвер expecificado nao foi encontrado.»); или System.out.println («Nao foi possivel conectar ao Banco de Dados»); на консоли? – JohnnyAW

ответ

0

Я считаю, что у вас есть драйвер sqlite на нашем пути к классам, который каким-то образом загрузился после первого цикла и пытается проанализировать ваш URL-адрес jdbc. Если вы не используете sqlite, пожалуйста, удалите его из класса пути выполнения.

Кроме того, если вы хотите открывать новое соединение каждый раз, когда вы вызываете getConexao(), не храните соединение как статическое. Кроме того, второе утверждение кажется ненужным (и может привести к непредсказуемому поведению), так что я предлагаю удаление:

Statement stm = null; 
Смежные вопросы