Java UnknownHostException

hubertus1990

Lt. Commander
Registriert
Sep. 2005
Beiträge
1.384
Hi Leute.

Habe ein kleines Problem.
Habe vor kurzem eine Android App geschrieben, die Daten via .php Script in eine mySQL Datenbank speichert. Diese App sowie das .php Script dazu funktionieren einwandfrei.

Nun, wollte ich das Gleiche als Java-Programm für Windows schreiben, und bekomme allerdings beim Verbindungsaufbau mit der Datenbank eine UnknownHostException.
Das Programm meint, es gäbe keinen Server mit der angegebenen Adresse.

Dies ist allerdings unmöglich, da die gleiche Host Adresse mit meiner Android App samt .php Script einwandfrei funktioniert.

Hier ein Codeausschnitt aus meinem funktionierenden .php Script samt Hostadresse, welches von der Android app verwendet wird:

FUNKTIONIERT:
Code:
//Variablen für den Verbindugsaufbau
	$dbhost = 'mydomain.sql.de';
	$dbuser = 'username';
	$dbpass = 'password';
	$dbname = 'dbname';
	 
	//Verbindung wird aufgebaut
	$dblink = mysql_connect("$dbhost", "$dbuser", "$dbpass")  or die ('I cannot connect to the database because: ' . mysql_error());
	mysql_select_db("$dbname");

Das .php Script wird dann hier nicht mehr benötigt, und ich verbinde mich hier direkt über java mit der Datenbank, was derzeit nicht funktioniert:

UnknownHostEcxeption: (obwohl identische host adresse)
Code:
String url = "jdbc:mysql://mydomain.sql.de/dbname";
		
		try
		{
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			
			try {
				
				// Connection object represents an open connection
				Connection c = DriverManager.getConnection(url, "username", "password");
				
				Statement st = c.createStatement();
				
				// and so on...
				
			} catch (SQLException e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

Ich bitte um Hilfe!
Was könnte der Auslöser für die Exception sein?
 
Ohne auf den Code zu gucken würde ich sagen das eine Firewall das Problem verursachen könnte.
 
Schon mal alles in einem connect String probiert?

Code:
Connection c = DriverManager.getConnection("jdbc:mysql://mydomain.sql.de/dbname?user=sqluser&password=sqluserpw");

mydomain.sql.de ist ja sicherlich jetzt eine von dir ausgedachte Domain und heißt im Programm anders, oder?
 
Firewall abschalten hab ich schon probiert, ändert nichts :(

@nithdi: Connect String bringt leider auch nichts :(
und ja, die adresse ist ausgedacht :)


Könnte es evtl. an meinen Routereinstellungen oder ähnlichem liegen?
(Obwohl ich mir das nicht vorstellen kann... )
 
Zuletzt bearbeitet:
Dein PHP-Script liegt bei einem Webhoster und die MySQL-Datenbank bei dem gleichen Webhoster auch? Nur eben auf einem anderen Server?
Vermutlich erlaubt der Webhoster nur den MySQL-Zugriff von seinen Servern aus, aber nicht von jeder IP da draussen im Netz, die wenigsten Webhoster erlauben den Fernzugriff auf eine MySQL-Datenbank.


Du solltest aber sowieso niemals nie deinem Android-App direkt den MySQL-Zugang geben! Der "Umweg" über die PHP-Datei ist der einzige richtige Weg!
 
Ganz genau, .php Script sowie Datenbank beim gleichen Webhoster!

Wie gesagt, meine Android App macht auch den ".php Umweg".
Aber bei diesem Java Programm wollte ich mir das anlegen eines neuen .php Scriptes sparen, wird aber nicht funktionieren wie es aussieht :)
 
Wenn das php Script schon auf dem Server liegt, würde ich das Problem mal bei der Firewall des Servers selbst suchen. Ich bin jetzt nicht det jdbc-Experte, aber diese Verbindung ist doch auch TCP-basiert und läuft damit über einen Port. Also check mal, ob die Firewall auf dem Server vielleicht alle Ports außer 80 blockiert.
 
Mit .php Script funktioniert alles einwandfrei! Es geht um die direkte Datenbankanbindung ohne .php Script.
Der Grund warum diese nicht funktioniert liegt allerhöchstwahrscheinlich beim Webhoster.
 
UnknownHostException ist eindeutig!

Der hostname ist auf dem Rechner, auf dem du das Programm ausführst, nicht per DNS auflösbar. Ich schätze mal, dass der hostname nur im lokalen DNS des PHP-Hosters bekannt ist, also nicht öffentlich.

Da du den hostnamen nicht nennst, kann man nur indirekt helfen. Versuch doch mal den hostnamen zu pingen (vom Rechner wo auch das Javaprogramm ausgeführt wird.), wenn keine IP aufgelöst werden kann, dann bestätigt das die Vermutung.
 
Jop, pingen geht auch nicht.
Damit steht wohl eindeutig fest das auf die Datenbank nicht von außen aus zugegriffen werden kann, sondern eben nur über ein .php Script am gleichen Server.
 
Zurück
Oben