SocketException vom mySQL-Treiber abfangen

Status
Nicht offen für weitere Antworten.

fischerman

Mitglied
Hallo,

ich versuche gerade etwas Stabilität in mein Java-Programm zu bringen. Allerdings bin ich nicht gerade Experte im Exception-Handling.
Mein Programm kommuniziert über JDBC mit einer MySQL-Datenbank. Soweit so gut. Wenn jetzt die DB nicht gestartet ist oder in meiner ini-Datei mit den Verbindungsdaten eine falsche IP steht, kann natürlich keine Verbidung aufgebaut werden und der mysql-Treiber wirft eine SocketException.

Ich habe nun wie folgt versucht die Exception abzufangen, damit mein Programm nicht gleich ganz abstürtzt. Leider will das der Compiler nicht. Da mein try Block wohl keine solche Exception wirft:

Code:
try {
			// Lade den JDBC Treiber
			String driverName = "com.mysql.jdbc.Driver";
			Class.forName(driverName);
			// Verbindung zur Datenbank aufbauen
			String url = "jdbc:mysql://" + serverName + "/" + mydatabase;
			try{
				connection = DriverManager.getConnection(url, username, password);
			}catch(SocketException e){
				JOptionPane.showMessageDialog(null,
						"Verbindung zum DB-Server konnte nicht hergestellt werden!\n "
								+ e.getMessage() + " Entweder gibt es Netzwerkprobleme oder \n die Daten in xBench.ini sind falsch!", "Fehler!",
						JOptionPane.ERROR_MESSAGE);
			}
		} catch (ClassNotFoundException e) {
			JOptionPane.showMessageDialog(null,
					"Datenbanktreiber konnte nicht gefunden werden! "
							+ e.getMessage(), "Fehler!",
					JOptionPane.ERROR_MESSAGE);
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null,
					"Datenbankverbindung konnte nicht hergestellt werden: "
							+ e.getMessage(), "Fehler!",
					JOptionPane.ERROR_MESSAGE);
		}

Für ein paar Tipps wäre ich sehr dankbar!

Gruß fischerman
 
Danke für den Tipp, die hatte ich vorher aber schon bemüht und hab leider nix passendes gefunden. Mir ist klar, dass beim Verbiungsaufbau eventl. eine SQLException geworfen wird. Diese catche ich ja auch, ich würde aber gern noch die Exceptions abfangen, die vom mysql-Driver geworfen werden, wenn Netzwerkprobleme bestehen.
Wenn ich das so versuche:
Code:
try{
            connection = DriverManager.getConnection(url, username, password);
         }catch(SocketException e){ 
             mach was...
        }
Sagt mir eclipse, dass an dieser Stelle keine solche Exception geworfen wird.
Oder gibt es eine andere Möglichkeit, Netzwerkprobleme ohne Programmabsturtz zu behandeln.

Gruss Fischerman
 
nein das geht nicht in dem Fall

=> die Entwickler des JDBC haben sich entschlossen, alles was im Zusammenhang der DB schiefgehen kann in eine SQLException einzupacken (also auch die Socketprobleme, ggf. kannst du dir ja den Stacktrace anschauen, auch #getCause() und getWarning() helfen manchmal weiter

zum Compilerproblem:

wenn in einem Block eine checkedException nicht fliegen KANN, weil sie nirgends in einer throws Klausel vorkommt, dann darf sie nicht in einem catch stehen
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben