# Prüfem ob HSQL Datenbank erreichbar ist.



## wildbret (24. Aug 2008)

Hallo, 

ich verwende eine HSQL Datenbank und prüfe im Rahmen der Fehlerbehandlung die Erreichbarkeit der Datenbank (bevor ich auf sie zugreife), damit keine Datenbankfehler auftreten können.

Allerdings denke ich, dass meine Vorgehensweise, wie ich die Erreichbarkeit der Datenbank prüfe, ein wenig langsam ist.
Es dauert ca. 1,5-2 Sekunden, bis die Meldung in meiner GUI ankommt. 
Vielleicht fällt ja jemandem eine schnellere Möglichkeit ein.

Erst lade ich den Treiber und anschließend versuche ich eine Verbindung zur Datenbank herzustellen.
Wurde die Verbindung erfolgreich hergestellt, setze ich ein Flag auf true --> itob.setDbReachable(true);
Falls nicht auf false: itob.setDbReachable(false);


```
public void openDb() {				
		try	{
			Class.forName("org.hsqldb.jdbcDriver");
		}
		catch (ClassNotFoundException e) {
			System.err.println("Keine Treiber-Klasse!");
			return;
		}				
		try	{			
			//Server Mode:
			con = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/zigbee;shutdown=true", "sa", "" );	
			itob.setDbReachable(true);
		}
		catch (SQLException e) {itob.setDbReachable(false);}
	}
```

Immer wenn ich auf die Datenbank zugreifen möchte, frage ich zuvor das Flag ab, wenn es gesetzt ist, laufen ganz normal die Datenbank Operationen ab und wenn nicht geb ich eine Meldung in einer JTextArea, in der Konsole oder sonstwo aus.


```
if(itob.getDbReachable() == true){
//... Datenbankzugriffe ...
}
else status.append("\nDatenbankfehler");
```

Danke für eure Hilfe.


----------



## maki (24. Aug 2008)

Testen ob eine DB erreichbar ist ergibt nur Sinn, wenn man etwas sinnvolles mit den gewonnen Infos anstellen kann.(?)

Die Verzögerung hat ihre Ursache im eingestellten Timeout.


----------



## wildbret (24. Aug 2008)

Ah der Timeout is also der Bösewicht, muss mal die Doku durchsehn, wie und ob man den reduzieren kann.

Also für mich macht das schon Sinn, weil mein Programm innerhalb eines anderen Programms (eines anderen Programmierers)  läuft bzw laufen kann.

Und da meine Anwedungung also nicht für den Start der Datenbank zuständig ist, kann ich nicht sicher sein, dass diese auch wirklich läuft. 
Folglich muss ich prüfen, ob die Datenbank läuift, bevor ich darauf zugreife, wenn ich Fehler vermeiden will.


----------



## wildbret (24. Aug 2008)

Hmm, also der LoginTimeOut des Drivermanagers steht standardmäßig auf 0 Sekunden und wenn ich ihn manuell auf einen großen Wert setze, wird die Verzögerung auch nicht größer, seltsam.


----------

