JAVA: MySql: zu viele Verbindung

Ich denke, dass meine Anwendung ist verflucht, Debuggen geht, wo er will, und ich weiß nicht, warum.
Zeile für Zeile Debuggen scheint zu analysieren, auch die auskommentierte Zeilen.
Ich denke, dass die Probleme auf meine Verbindung-Methode, sehe ich einen deutlichen Leistungsabfall, und am Dritten (oder vierten nvm) Verbindung ich bekomme diese Fehlermeldung:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Too many connections

Ich bin mir sicher, dass ich die Verbindung zu schließen, jedes mal, wenn ich habe Zugriff auf die DB (mit finally-Anweisung aus dem try catch in der Umsetzung).

Hier ist meine connection-Klasse:

package Connection;

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.rmi.RemoteException; import java.sql.*; import java.util.Properties;

public class ConnectionDB {         
    public static ResultSet rs = null;  
    public static Statement stat = null;    
    public static Connection cn = null;

    public static void connect() throws RemoteException     {
            String dbHost="",dbUser="",dbPassword="";
            Properties prop=new Properties();
            try
            {
                //carico il file:
                prop.load(new FileInputStream("***/config.properties"));
                //Leggo le proprietà del file:
                dbHost=prop.getProperty("host");
                dbUser=prop.getProperty("user");
                dbPassword=prop.getProperty("password");
            }catch(FileNotFoundException fe){
                System.out.println("config file not found");
            }catch(IOException ex){
                System.out.println("Error reading config file");
            }
            try 
            {
                String driver = "com.mysql.jdbc.Driver";
                Class.forName(driver);
                dbHost = "jdbc:mysql://"+dbHost;
                cn = DriverManager.getConnection(dbHost,dbUser,dbPassword);
                stat = cn.createStatement();
            }catch(SQLException e){
                System.out.println("Can't connect to the DB");
            }
            catch(ClassNotFoundException cln){
                System.out.println("Error using JDBC driver");
            }   
    }   

    public static void disconnect() throws RemoteException  {
            try{
                if(rs != null) rs.close();
                if(stat != null) stat.close();
                if(cn != null) cn.close();
            }
            catch(SQLException sqlEx){
                System.out.println("Error: disconnect");
            }   
      }
}
  • stackoverflow.com/questions/1392304/...
  • Wenn Sie das Kontrollkästchen in der Workbench, wie viele verbindungen tatsächlich öffnen? Weniger als die erlaubte maximale? Und sind alle verbindungen, die Sie wohl geschlossen werden, auch wirklich geschlossen?
  • wie viele Male haben Sie call-Verbindung vorher trennen? eine weitere Sache .. jedes Ding ist statisch.. wenn Sie connect() connect() disconnect (), wie Sie jemals trennen die erste Verbindung?
  • kann ich sehen, dass (mit netbeans als IDE)? Grundsätzlich ist die Verlangsamung kommt bei der ersten Verbindung, und ich weiß nicht warum...
  • Ich denke, dass es besser ist, zu ändern meine eigenen "meine.cnf" - Datei, sodass mehr verbindungen, aber ich glaube nicht, dass das die Lösung ist, ist dies nur eine temporäre Lösung... (aber ich bin ein Anfänger so alle Vorschlag könnte groß sein für mich ^_^)
  • Ich nenne die connect-Methode nur eine Zeit, die Verlangsamung kommt beim ersten verbinden, dann wird für jedes aufeinander folgende Verbindung, zu der diese Wirkung erhöhen viel, bis ich bekomme diese Fehlermeldung :S
  • ok in der connect-Methode setzen Sie eine print-Anweisung, um zu sehen, wie oft es aufgerufen wird ( wenn es nur einmal aufgerufen werden, sollten Sie nicht bekommen, zu viele verbindungen Fehler).. die Einrichtung neuer verbindungen ist teuer, und es gibt Vorder-verbindungspools verwendet werden, um die Wiederverwendung von verbindungen (Siehe Antworten unten).. also für die Leistung die Verwendung von verbindungspools.. für die Fehler , ich glaube nicht, dass Sie nur nannte es einmal 🙂
  • downloaden und installieren Sie MySQL Workbench CE, überprüfen Sie den server, während es läuft.
  • Sie werden versuchen, ein singleton? Warum haben Sie ein statement und ein resultset als Mitglieder einer Klasse, die scheint, wie alle es tun sollten, ist schaffen eine Verbindung zu einer Datenbank?
  • ja, ich versuche mit der Verbindung als singleton zur Verwaltung der Verbindung, btw es scheint nicht, eine schöne Lösung :S
  • Ich schlage vor, Sie Profil Ihre app mit profiler, wie JVisualVM, schauen, welche Methode dauert die längste Zeit, dass problem lösen.
  • Gelöst... nur @OsamaJaved Vorschlag, es war eine Methode, die (in einem Zyklus), die war ohne das richtige trennen Aufruf. Sorry für die "timewasting" und ich danke Euch allen!!!

InformationsquelleAutor Stiva | 2012-07-19
Schreibe einen Kommentar