2017-06-23 3 views
1

Fehler: - SCHWERE: null com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Datenquelle abgelehnt Verbindungsaufbau, Meldung vom Server: „Zu viele Verbindungen“ Code untenZu viele Verbindung in java jdbc

gezeigt
try { 
     BufferedReader br=new BufferedReader(new FileReader(filename)); 
     String line; 
     String tru="TRUNCATE `project`.`uploadtable`;"; 
     try 
     { 
      Statement stmt = Dutil.getConnection().createStatement(); 



    stmt.executeUpdate(tru); 
     } 
     catch(Exception e){} 
     try { 
      while((line=br.readLine())!=null){ 
       String values[]=line.split("\t"); 
       String[] splitStr = values[1].split(" "); 


       try {String sql="INSERT INTO `project`.`uploadtable` 
      (`empid`, `date`, `time`, `in_out_index`) VALUES 
      ('"+values[0]+"', '"+splitStr[0]+"', '"+splitStr[1]+"', 
      '"+values[3]+"');"; 
        PreparedStatement 
        pst=Dutil.getConnection().prepareStatement(sql); 
        pst.executeUpdate(); 
       } catch (SQLException ex) { 
        System.out.println("Error"); 

      Logger.getLogger(UploadFrame.class.getName()).log(Level.SEVERE, 
       null, ex); 
       } 
      } br.close(); 

      this.dispose(); 
      LogButtonFrame lbf=new LogButtonFrame(); 
      lbf.clockinouttable(); 
      JOptionPane.showMessageDialog(null,"Upload Complete");} catch 
      (IOException ex) { 
      Logger.getLogger(UploadFrame.class.getName()).log(Level.SEVERE, 
      null, ex); 
      } 
      } catch (FileNotFoundException ex) { 
      Logger.getLogger(UploadFrame.class.getName()).log(Level.SEVERE, 
      null, ex); 
      } 
      catch (Exception ex) { 
     JOptionPane.showMessageDialog(null, "Error"); 
     } 
+3

bitte Ihren Code nicht posten Verwenden Sie Bilder –

+2

Sie müssen Anweisungen und Verbindungen schließen, nachdem Sie sie verwendet haben, andernfalls bleiben sie geöffnet und irgendwann wird dieser Fehler angezeigt. Siehe: [SQL-Anweisungen mit JDBC verarbeiten] (https://docs.oracle.com/javase/tutorial/jdbc/basics/processingsqlstatements.html) – Jesper

Antwort

0

Sie scheinen Verbindungen zu erstellen und schließen sie nie, obwohl es schwer zu sagen von den Bildern, die Sie gestellt haben.

+0

Wo schließe ich die Verbindung? –

+0

Wo Sie Ihre INSERT-Anweisung machen. Du solltest mit 'try/catch/finally' oder' versuche mit Ressourcen' nachsehen. Es gibt viele Beispiele im Internet und ich könnte mir vorstellen, dass der Link, den Jesper im Kommentar zu Ihrer Frage hinzugefügt hat, ihn ausführlich behandeln würde. – DaveH

+0

Können Sie meinen Code jetzt überprüfen? –

0

Wenn Ihre Anwendung mehr als eine Verbindung erfordert, sollten Sie einen Verbindungspool wie den Apache DB-Verbindungspool verwenden, in dem Sie die Anzahl der Verbindungen konfigurieren können. Hier ist der Link für die DBCP-Dokumentation https://commons.apache.org/proper/commons-dbcp/

Wenn Sie sicher sind, dass Ihre Anwendung nur eine Verbindung benötigt, stellen Sie Ihr Verbindungsobjekt als Singleton-Objekt in der DBUtil-Klasse her. Dies wird definitiv das Problem lösen und keine Notwendigkeit, die Verbindung zu schließen. Ihre gesamte Anwendung verwendet ein einzelnes Verbindungsobjekt, um eine Verbindung zur Datenbank herzustellen.

+0

Ich habe Ihre Antwort leicht umformuliert und setze das Szenario für den Verbindungspool zuerst, da dies heute häufiger ist als Anwendungsfälle für einzelne Verbindungen. –

2

Das Problem ist:

PreparedStatement pst = Dutil.getConnection().prepareStatement(sql); 

Sie den Code nicht von Dutil gezeigt hat, aber es schafft eine neue Verbindung bei jedem Aufruf, dies bedeutet, dass die Verbindung nicht geschlossen wird immer, so dass es zu Glück unter der Annahme, Treiberimplementierungsspezifika und der Garbage Collector, um es geschlossen zu bekommen.

Stattdessen sollten Sie try-with-resources verwenden:

try (Connection connection = Dutil.getConnection(); 
    PreparedStatement pst = connection.prepareStatement(sql)) { 
    // Use pst 
} 

Nach dem Ende dieser Blöcke, die beide pst und connection ordnungsgemäß geschlossen werden, auch wenn Ausnahmen auftreten, usw.