# Überprüfung vom Datenbankserver



## freichle (3. Sep 2007)

Wie kann ich in Java überprüfen, ob ein Datenbank Server für die PostgreSQL Datenbank aktiv ist, ohne dass ich eine Exception erhalte?


----------



## SlaterB (3. Sep 2007)

allgemein nebenbei: was hast du denn gegen Benachrichtigung durch Exception in diesem Fall?
für eine derart spezielle Anfrage ist eine einmalige Exception mit einmaligen Abfangen doch nicht so aufwändig?


----------



## Guest (3. Sep 2007)

Ich hab hab meherere Funktionen die auf eine Datenbank zugreifen, dabei sollte vorher überprüft werden ob die Datenbank auch aktiv ist. Sollte es nicht der Fall sein, so wird dementsprechend auf der GUI bestimmte Funktionen angezeigt und andere wiederum ausgeblendet.


----------



## SlaterB (3. Sep 2007)

ein solcher Test kommt natürlich in eine Operation 
boolean checkXY()
dann ist es nur eine Zeile


----------



## freichle (3. Sep 2007)

Soweit ist mir das schon klar, aber wie sieht ein solcher Befehl  aus der mit ein Boolean mit Checked zurückgibt?


----------



## SlaterB (3. Sep 2007)

von meiner Seite immer noch der Tipp: lasse es wie es ist mit der Exception, daran hat sich ja nix geändert?


----------



## freichle (3. Sep 2007)

ich will doch einfach nur eine funktion die mit ein true oder false zurückgibt mehr nicht....

ich will es einfach sauber implementiert haben


----------



## FenchelT (3. Sep 2007)

Hallo,

also ganz ehrlich, ich wuerde es auch so machen wie SlaterB.
Wenn Du ein True oder False haben moechtest, dann lass Dir doch diesen Wert aus einer Funktion zuruekgeben,
je nachdem ob eine Exception geworfen wurde oder nicht.

Solltest Du es anders wuenschen, ich kenne jetzt Postgres nicht, so sind fuer gewoehnlich Datenbank Dienste gestartet.
Du musst also nur pruefen ob der Dienst gestartet ist und dann hoffen, dass es keine Probleme mit der DB gibt, die Du ansprechen moechtest  :autsch: 

Ich denke, die andere Alternative ist schneller und nicht wirklich unsauber; dafuer gibt es doch extra die MOeglichkeit auf Exceptions zu reagieren.


Just my 2 Cent


----------



## tuxedo (3. Sep 2007)

Ich glaube du suchst sowas in der Art, oder?
->

```
public boolean doPostgresDbTest(){

try{
// Hier der Test der die Exception wirft, wenn der Zugriff nicht möglich ist
} catch (DatenbankNichtErreichbarOderBenutzbarException e) {
return false;
}

return true;

}
```

Ein spezieller Befehl der prüft ob eine DB aktiv ist oder nicht, ist in JDBC und Konsorten sicher nicht enthalten. Deshalb musst du ihn dir selbst basteln. Und das hier ist eine mögliche Lösung den Befehl selbst zu basteln. Weil das einzigste Feedback das du recht einfach erhälst, ob die DB benutzbar ist oder nicht, ist eine Exception. Und mit der lässt sich ja ganz easy ein boolscher Wert formen.

- Alex


----------



## Guest (3. Sep 2007)

Schade hatte gehofft was anderes zu finden als das man das feedback nur mit einer exception bekommt, aber trotzdem danke.


----------



## tuxedo (3. Sep 2007)

Selbst wenn du ne Methode gefunden hättest: Intern hätte sie es wohl auch nicht anders gemacht. Weil früher oder später gibts ein Timeout oder sonstetwas. Wie sonst sollte auch eine Datenbank, die du nicht erreichen kannst, dir aktiv mitteilen, dass sie nicht erreichbar ist? Das ist wie wenn jemand vor der Haustüre steht und frägt: "Jemand zuhause". Der der vor der Tür steht und wartet geht halt irgendwann wenn keiner Antwortet.. Und das ist dann die Exception. 
Das was du haben wolltest ist einer der von drinnen zurückruft "nö, keiner da". Aber das geht ja nicht wirklich ;-) Weil dann wäre ja doch jemand zuhause...

Und für genau solche Dinge sind ja Exceptions ja da. 

Exceptions sind nicht "böse" wie viele immer meinen. 

- Alex


----------



## sparrow (3. Sep 2007)

Das was du vorhast ist auch sehr gefährlich.
Erst dachte ich, dass es sich um eine einmalige Prüfung handelt (z. B. nach der Installation) auf die du im Programm so reagierst, dass die Software in einen Zustand versetzt wird die es überbaupt erst ermöglicht zu starten... aber auch da würde ich über die Exception gehen.
Dann habe ich gelesen, dass du das ganze mehrmals im Programm einsetzen willst.

Ich denke du willst so vorgehen, dass du erst schaust ob die Datenbank da ist und dann die Abfragen startest. Das verführt aber dazu davon auszugehen, dass zum Zeitpunkt der Abfrage die Datenbank wirklich erreichbar war. Darauf würde ich mich nicht verlassen. Gerade bei Zeitintensiven Abfragen kann es durchaus mal vorkommen, dass dei Verbindung aus irgend einem Grund unterbrochen wird.

Ich würde es auf jeden Fall über die Exception lösen, man kann ja diese auch im Programm interpretieren und passend reagieren (SQL Fehler z.B. falscher Datentyp, keine Verbindung, Autorisierung fehlgeschlagen....)

Ein toller Wahspruch: Exception sind nichts schlimmes... solange man sie nicht ignoriert.


----------



## tuxedo (3. Sep 2007)

sparrow hat gesagt.:
			
		

> Ein toller Wahspruch: Exception sind nichts schlimmes... solange man sie nicht ignoriert.



... und korrekt auswertet... ;-)

- Alex


----------

