# Datenbankverbindung verwalten



## Eisscholle (18. Okt 2007)

Hi,

ich habe mehrere Klassen in einer "Anwendung", die auf eine DB zugreifen, weil sie daraus Daten beziehen. Ich habe eine Klasse DatabaseConnection die mir eine Verbindung zur DB öffnet, schließt oder zurückliefert. Wenn ich jetzt jedesmal eine Instanz bilde und Daten abfrage, wird immer eine neue Verbindung aufgebaut. Mache ich das mehrfach hintereinander, fliegt enwteder alles aus der Kurve oder wird halt langsam - logisch. Nun suche ich eine Möglichkeit, wie ich nur eine DB-Verbindung in meiner Anwendung öffne, überall in der Anwendung nutzen kann und am Ende kontrolliert schließe.

Eine Notlösung wäre, dass ich als var args eine Datenbankverbindung im Konstruktor jeder Klasse mit übergebe und wenn keine kommt, eine selber aufbaue. Dann gibts aber wieder mit dem Schließen Probleme und schön ist es absolut nicht - zerstört ja alle Klassen irgendwie.

Kann man dies irgendwie günstiger lösen? Eventuell irgendwie mit static in einer Datenbankverwaltungklasse? Das ich halt dort permanent die Verbindung abrufen kann, wenn ich sie vorher einmal geöffnet ahbe. Weiß halt nicht genau, ob dies wirklich so gehen würde.

Danke!

VG


----------



## Guest (18. Okt 2007)

Mögliche Lösung: ServiceLocator als Singleton. :wink:


----------



## Gast (18. Okt 2007)

DatabaseConnection als Singelton. 

evtl. einen ConnectionPool einrichten.


----------



## maki (19. Okt 2007)

Moderne JDBC Treiber sollten alle schon poolen,
welche DB mit welchem Treiber benutzt du?

Ein ServiceLocator die dir einen DaoFactory zurückgibt wäre am flexibelsten, möglich wäre auch nur eine DaoFactory als Singleton.


----------



## Eisscholle (19. Okt 2007)

Ich nutze mysql-connector-java-3.0.17 , da mir nur eine MySql-Datenbank zur Verfügung steht. Und wie verwaltete ich dies dann genau?


----------



## maki (19. Okt 2007)

mysql? Könnte mich täuschen, aber ich gleube da gibt es eine DataSource die gepoolt wird.

Ansonsten kannst du denn DBCP von apache hernehmen, um deinen eigenen Pool einzurichten.

Wichtig bei gepoolten connections: Immer (!!!) alle resultsets und statements schliessen.


----------



## Eisscholle (19. Okt 2007)

Die Sache von apache is ganz nett. Die muss ich mir morgen mal in Ruhe anschauen. Danke. Werde mich nochmal melden, wenn ich auf dem Schlauch sitze.


----------

