# Max Verbindungen aus einer Applikation zu MySQL



## mas (25. Apr 2006)

Hallo liebe Leute!
Ich hab da eine Frage zur folgendem Sachverhalt.

In meiner Applikation existiert eine Klasse DBverbindung.java

Diese Verwende ich um auf eine lokale MySQL Datenbank zuzugreifen.
Erstelle ich eine Instanz dieser Klasse:


```
DBverbinfung db=new DBverbindung();
```

geschieht im Konstruktor dieser Klasse folgendes:

Erst wird der Treiber geladen mit Class.forName("Treibername");

Dann wird eine verbindung aufgebaut:

```
this.conn=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/xx","testuser","testpassword");
```

Diese Verbindung wird in einer Instanzvariable der Klasse gespeichert.

Nun kann ich einfach ueberd die Methoden der Klasse auf die Db zugreifen:

Bsp:


```
Vector Irgendwas=db.getIrgendWas();
```


Nun die Frage:
Ich habe aus faulheit damit angefangen an beliebigen Stellen meines Programmes, immer wenn ich auf die
Datenbank zugreifen will. Neue Instanzen dieser Klasse zu erstellen.

Also immerwieder:

```
DBverbinfung db=new DBverbindung();
```
und dann mit den Methoden auf die Db zugreifen.

Mein Logik würde mir sagen, dass dies eine schlechte Methode ist, da ja jedesmal der Konstruktor eigentlich
neue Verbindungen zur DB erstellt. Ich arbeite ja da mit unterschiedlichen Instanzen von DBverbindung.

Eigentlich wollte ich das ändern, und DBverbindung statisch machen, bzw  so, dass nur ein einziges Objekt von der Klasse existieren kann-> Somit hätte ich auch nur eine Verbindung. Zum Schluss koennte ich diese einzelne Verbindung schließen.


Nach längeren Tests scheint es mir aber, als ob meine schlechte Lösung auch ginge. Bzw. ich komme nie zu einer
Meldung wie Max Connections erreicht oder sowas.

Kann es sein, dass meine Appliaktion doch nur eine Verbindung zur Datenbank hält obwohl ich zahlreiche Instanzen
von DBverbindung erzeuge? Oder hatte ich einfach nur Glück bis jetzt.?

Vielleicht weiß ja wer, wo und wie man live (z.B in der Console) die  gerade bestehenden Verbindungen zu meiner SQL-DB sehen kann.

Danke für Infos
lg mas


----------



## Dukel (25. Apr 2006)

http://dev.mysql.com/doc/refman/5.0/en/too-many-connections.html

The number of connections allowed is controlled by the max_connections system variable. Its default value is 100. If you need to support more connections, you should restart mysqld with a larger value for this variable.


----------



## Mas (26. Apr 2006)

Hi Leute!
Konnte mir nun selbst helfen.
Mit meiner beschrieben "Lösung" wurden tatsächlich ständig neue Verbindungen zu MySQL
aufgebaut. 
Es schien so, als würde MYSQL Verbindungen, die zulange nichts machen, wieder entfernen.

Mit SHOW PROCESSLIST   (Eingegeben in der Konsole) konnte ich die aktuellen Verbindungen sehen.

Jedes Mal, wenn ich meine Klasse neu Instanzierte, wurde eine neue Verbindung erstellt.
Da das sicher nicht gut sein kann hab ich nun ganze einfach meine Verbindung

in der Klasse DBverbindung als static (Klassenvariable) gesetzt. Somit wird für alle Instanzen von
DBverbindung diesselbe Verbindung zur Datenbank verwendet.

Im Konstruktor steht nun folgendes:


```
if(conn==null) //Ist die Klassenvariable noch nicht initialisiert, dann erstelle verbindung
        	conn=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/xx","testuser","testpassword");
```


Nun kann ich im Programm soviele Instanzen der Klasse DBverbindung verwenden wie ich will.
Es wird immer nur eine Verbindung genützt.

lg
Mas


----------

