Verbindung mit der Datenbanken

Athro

Mitglied
Hallo,
ich entwickle gerade eine Webanwendung die auf die Datenbanken zugreifen soll, von dort Daten holen, ändern und speichern.
wie ist besser dass man die Verbindung (durch jdbc) 1 Mal macht und dann die Statment immer durch die Session weiter geben und am Ende die DB schließen.
Oder soll man jedes Mal (wenn von der DB was gebraucht wird) eine Verbindung erstellen, die benötigte Daten holen und dann die DB schließen.

Danke
Athro
 
Es kommt darauf an wieviele Verbindungen benötigt werden und ob die Verbindungen eventuell lange Zeit nicht verwendet werden. Wenn viele Verbindungen unregelmäßig verwendet werden ist es vielleicht sinnvoll einen Verbindungspool zu verwenden aus dem Verbindungen bei Bedarf ausgeliehen und nach der Verwendung wieder zurückgegeben werden können.
 
Wirf mal einen Blick auf das JDBC Template von Spring (bevor mich jetzt wieder jemand schlägt - das kann man auch OHNE den Rest von Spring verwenden). Das instantiierst du, setzt eine DataSource Instanz deiner Wahl (z.B. irgendeine aus commons-dbcp oder halt die einfach DriverManagerDataSource von Spring). Danach kannst du nach belieben über das Template auf die Datenbank zugreifen.

Gruß
Ollie
 
Hallo Zeja,

Es kommt darauf an wieviele Verbindungen benötigt werden und ob die Verbindungen eventuell lange Zeit nicht verwendet werden.

Also ich bin der Meinung, dass am besten man eine Verbindung macht und mit der Session den Statment immer die benötigte Abfragen an die DB stellen und wenn keine Zugriefe auf die DB mehr benötigt sind, soll man erst das Statment und die DB-Verbindung schließen.

Die Gefahr ist jedoch wenn die Session verloren geht (Z.B. wenn die Session mehr als 30 Minuten dauert), bleibt die Verbindung mit der DB irgend wo Hängen? Oder geht sie mit der Verlöst der Session auch weg?

Danke
Athro
 
Was ist denn eine Session? Auf Datenbanken gibt es erstmal nur Connections. Daneben führen OR Mapper wie Hibernate den Begriff einer Session ein. Die ist allerdings sehr kurzlebig. Wenn du von einer Session sprichst, klingt das eher nach einer HTTP Session, die mit Datenbanken erstmal gar nichts zu tun hat.

Gruß
Ollie
 
Hallo Ollie,

Danke für Deine Antworten, ein Mal sagst Du mir "Wirf mal einen Blick auf das JDBC Template ...." und beim Zweiten Mal beantwortest Du meine Frage mit einer Frage!

Also wenn man eine Session(egal was von eine) hat, und dazwischen (während dieser Session) trät DB-Verbindung, wird die DB-Verbindung automatisch geschlossen, wenn die Session weg ist, oder bleibt die DB-Vebindung Offen?

Gruß
Athro
 
Bei JDBC gibts es keine Sessions. Du kannst eine Verbindung (connection) zur DB herstellen, die bleibt so lange bestehen, bis sie geschlossen wird.

Oliver sprach noch von Hibernate. Da gibt es Sessions. Diese können "ablaufen", dann besteht aber weiterhin immer noch die Connection zur DB.

Wenn du das ganze bei einer Webandwendung machen möchtest. Sollten die ganzen Datenbankzugriffe nur auf dem Server geschehen (siehe den Link den ich oben gepostet hab). Dann kann der Server so lange er läuft eine Connection zur Datenbank halten. Das ist gar kein Problem.

MFG

Sascha
 
Danke für Deine Antworten, ein Mal sagst Du mir "Wirf mal einen Blick auf das JDBC Template ...."...
Der Tipp war ernst gemeint. Das JDBC Template löst genau diese Frage für dich bzw. delegiert sie an die darunter liegende Datasource. Das ist eine überschaubare Api, die einem sehr viel unnötigen Code abnimmt und somit Fehlerquellen reduziert. Ich würde auf jeden Fall keinen JDBC Code mehr von Hand schreiben wollen.

und beim Zweiten Mal beantwortest Du meine Frage mit einer Frage!
Es ist einfach so, dass deine Frage nicht ganz klar ist. Du redest von einem Konzept "Session", dass es in JDBC einfach nicht gibt. Es sei denn du zeigst mir die JDBCSession Klasse im Java API ;). Daher meine Rückfrage.

Ich gehen jetzt davon aus, dass du eigentlich eine Connection meinst (korrigier mich, falls ich daneben liegen sollte). Diese bleibt solange auf, bis du sie explizit schließt oder ein Timeoutauftritt. Wenn du allerdings vergisst die Connection zu schließen und ständig neue anforderst, schmeißt irgendwann die Datenbank einen Fehler.

Grundsätzlich kann ich nur wiederholen, dass man sowas nicht selbst coded. Mit DataSource gibt es ein schickes Interface im JDK, mit commons-dbcp noch schickere Implementierungen, die genau das regeln.

REINHAUN!
 
Ich würde dir auch dazu raten das JDBCTemplate von Spring zu nehmen. Das nimmt dir sehr viel Arbeit ab.

Schau dir auch die DAOs an. So kannst du deine Datenhaltungschicht sehr leicht ändern ohne dein Projekt komplett überarbeiten zu müssen.

MFG

Sascha
 
Zurück