eine Datenbankserver-Abfrage?

roschki

Grünschnabel
Hallo Leute,

folgendes Problem. Ich habe eine Anwendung, die bei Programmstart zu einer Datenbank eine Verbindung aufbauen soll. Scheitert dies, wird ein Einstellungsdialog geöffnet, in dem die Verbindungsdaten eingestellt werden.
Wie kann ich es jetzt realisieren, dass nach Eingabe einer IP oder sonstwas in einem dafür vorgesehenen Textfeld überprüft wird, ob der Server existiert?

Ich habe bisher folgendes Fragment für den OK-Button des Dialogs:
Code:
protected void buttonPressed(int buttonId) {
	if (buttonId == OK) {
		int close = 1;
			
		// read out and save user input
		try {
			InetAddress inet = InetAddress.getByName(server.getText().trim());							
			// convert text value to integer
			close = Integer.parseInt(port.getText());
				
			// save to xml-file
			section1.put("server", server.getText().trim());			
			section1.put("database", database.getText().trim());
			section1.put("port", port.getText().trim());
			section2.put("m_server", m_server.getText().trim());
			section2.put("p_server", p_server.getText().trim());				
			settings.save(prop.getPath());
				
			if(!inet.isReachable(2000)) {
				MessageBox hint = new MessageBox(shell, SWT.OK | SWT.APPLICATION_MODAL	| SWT.ICON_ERROR);
				hint.setMessage("Der Server "+server.getText().trim()+" konnte nicht erreicht werden.");
				hint.setText("Verbindungssfehler");
				hint.open();

				setReturnCode(-2);
				close();
				return;
			}
		}	
		catch(UnknownHostException e) {
			MessageBox hint = new MessageBox(shell, SWT.OK | SWT.APPLICATION_MODAL	| SWT.ICON_ERROR);
			hint.setMessage("Der Server "+server.getText().trim()+" konnte nicht erreicht werden.");
			hint.setText("Verbindungssfehler");
			hint.open();
			System.out.println("PropertiesDlg: "+e);

			setReturnCode(-2);
			close();
			return;
		}
		catch(IOException e) {
			MessageBox hint = new MessageBox(shell, SWT.OK | SWT.APPLICATION_MODAL	| SWT.ICON_ERROR);
			hint.setMessage("Daten konnten nicht gespeichert werden.");
			hint.setText("Zugriffsfehler");
			hint.open();
				
			setReturnCode(-1);
			close();
			return;
		}
		catch(NumberFormatException e) {
			MessageBox hint = new MessageBox(shell, SWT.OK | SWT.APPLICATION_MODAL	| SWT.ICON_ERROR);
  			hint.setMessage("Der Port muss eine Ganzzahl im Bereich 1024 - 65535 sein!");
  			hint.setText("Falsche Eingabe!");
  			hint.open();

  			setReturnCode(-1);
			close();
			return;
		}					
			
		if((close>1024)&&(close<65535)) {				
			setReturnCode(OK);    
			close();
		}
		else {
			MessageBox hint = new MessageBox(shell, SWT.OK | SWT.APPLICATION_MODAL	| SWT.ICON_ERROR);
  			hint.setMessage("Der Port muss eine Ganzzahl im Bereich 1024 - 65535 sein!");
  			hint.setText("Falsche Eingabe!");
  			hint.open();
  			setReturnCode(2);
		}
	}				
}

So, das Problem ist jetzt, dass die inet.isReachable(2000) Abfrage bei meinem lokalen Server hier (Suse 10 mit MySQL 5), immer false liefert. Obwohl eine Verbindung da ist (kommentiere ich es aus, kann das Programm verbinden).
Die Abfrage muss aber irgendwie rein, wenn ein User mal einen falschen Server eingibt. Irgendwelche Ideen?

MfG
roschki
 
Zurück