# MySQL Connection richtig herstellen. Wie ?



## der_sharky (25. Apr 2018)

Hallo zusammen,
ich programmiere zurzeit eine Java Swing Anwendung, die mit der MySQL verbunden ist. Das Problem: Wenn ich auf JButton mehrmals klicke dann kommf der Fehler:User 'XXXXXX' has exceeded the 'max_user_connections' resource (current value: 5). 
Hinter JButton steht einen Event und damit werden Daten in der Datenbank eingefügt(INSERT).
In der Anwendung habe ich auch eine JTable. Beide Elemente JButton und JTable sind mit eigene MySQL Connection mit der Datenbank verbunden, sowie mit eigenen Klassen. Ich vermute hier liegt das Problem. Vielleicht sollte ich für die MySQL Connection eigene Klasse erstellen und die Element JButton und JTable später zuweisen. Hat jemanden eine Idee, wie ich das Problem lösen kann ?
Vielen Dank


----------



## Flown (25. Apr 2018)

Brauchst du soviele Connections auf die DB? Reicht nicht eine aus?


----------



## der_sharky (25. Apr 2018)

Hi Flown, danke für die schnelle Reaktion.
Meine Frage: Wie kann ich nur eine Connection für alle JElements erstellen ? Wo soll ich sie speichern( vllt. eigene Klasse) ? Wie können später alle JElements auf sie zugreifen.
Danke


----------



## Flown (25. Apr 2018)

der_sharky hat gesagt.:


> Wo soll ich sie speichern( vllt. eigene Klasse) ?


Ja


der_sharky hat gesagt.:


> Wie können später alle JElements auf sie zugreifen.


Über die Klasse (kann auch einen statischen Zugriff haben, da es ja ein Singleton ist.)


----------



## der_sharky (25. Apr 2018)

Danke dir


----------



## der_sharky (25. Apr 2018)

Ich habe mein Problem so gelöst:
Ich habe eine extra Klasse erstellt wo ich die DB Connection (Singleton) gepackt habe:


```
import java.sql.Connection;
import java.sql.DriverManager;

public class DBConnection {

    static Connection conn = null;

    private DBConnection() {

    }

    public static Connection getDBConnection() {
        try {
            if (conn == null) {
                Class.forName("com.mysql.jdbc.Driver");
                conn = DriverManager.getConnection("jdbc:mysql://XXXXXXX/", "XXXX", "XXXXXX");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return conn;

    }

}
```

Danach konnten die anderen Klassen durch  Connection con = DBConnection.getDBConnection();  auf die DB Connection Klasse zugreifen. Jetz werden keine neue Verbindungen aufgebaut wenn ich z.B. einen JButton klicke.
Es werde nur neue Verbindungen aufgebaut wenn ich die komplette  Anwendung parallel wieder starte.


----------



## Mercious (26. Apr 2018)

Sollte in der Realität nicht Connection-Pooling die sauberste Methode sein, Datenbank-Verbindungen innerhalb einer Anwendung zu verwalten? 
Dazu gibt es schon mehre, fertige Implementierungen, die man nutzen kann. Wenn ich das richtig sehe ist deine einfache Singleton Klasse nicht MT-tauglich.


----------



## Flown (26. Apr 2018)

Naja. Die Anwendung hört sich jetzt nicht nach stark frequentierten Queries, Multithreading und DB Belastung an. Geschweige davon wissen wir nicht mal ob der Driver das überhaupt unterstützt.


----------

