2009-05-28 10 views
0

Wenn Sie über eine Klasse verfügen, die Anforderungen von anderen Klassen für Datenbankdaten verarbeitet, wann sollten Sie die Datenbankverbindung halten und wann sollten Sie sie schließen und bei der nächsten Anforderung erneut öffnen?Beim Zugriff auf eine Datenbank über JDBC/ODBC sollten Sie die Verbindung für jede Anfrage erstellen und schließen.

Was ist, wenn es sich um einen Dienst handelt, der auf Verbindungen von externen Anwendungen reagiert? (Webservice, Ajax, RPC)

Ist es eine gute Idee, eine Singleton-Verbindung zu der Datenbank zu halten, die immer geöffnet ist, und sie bei einem Fehler einfach wieder zu öffnen? Oder sollten Sie für jede Anfrage eine neue Datenbankverbindung öffnen?

Wenn es eine schlechte Idee ist, ein Singleton-Datenbankobjekt beizubehalten, das eine immer offene Verbindung zur Datenbank hat, gibt es dann irgendwelche Umstände, wo es eine gute Idee ist? Ich habe es oft als eine Rechtfertigung für das Singleton-Muster bezeichnet?

Ich spreche nicht über eine neue Verbindung pro Datenbankabfrage, das wäre albern.

Antwort

1

Sie möchten wahrscheinlich einen Blick auf connection pooling werfen.

In diesem Szenario werden N Verbindungen geöffnet und Clients zur Verfügung gestellt. Wenn Sie die Verbindung "schließen", wird die Verbindung selbst nicht geschlossen, sondern zur Verwendung durch einen anderen Client an den Pool zurückgegeben.

Apache DBCP ist eine nützliche Bibliothek, um dies zu verwalten.