java.net.UnkownHostException: null bei jar-File

Status
Nicht offen für weitere Antworten.

Alex_winf01

Top Contributor
Ich habe ein Jar-File vorliegen, in denen meine notwendigen Jar-Files, der Ordner org und meine Mainfest.MF liegt.

Wenn ich jetzt das Jar-File öffne wird korrekterweise meine Login.class aufgerufen. In dieser Datei baue ich eine Verbindung zur DB auf:

Code:
connection = DriverManager.getConnection("jdbc:h2:tcp:localhost/test", "sa", "");

Nun bekomme ich beim Anmelden eine
Code:
java.net.UnknownHostException: null

Wenn ich meine Login mit einer start.bat aufrufe oder aus meinem Editor heraus bekomme ich diese Fehlermeldung nicht. Wer kann mir da helfen?

Ach ja: die URL passt natürlich. Das hab ich als erstes geprüft und die DB besteht natürlich auch.
 
Alex_winf01 hat gesagt.:
Code:
connection = DriverManager.getConnection("jdbc:h2:tcp:localhost/test", "sa", "");
...
Ach ja: die URL passt natürlich. Das hab ich als erstes geprüft und die DB besteht natürlich auch.

falsch. wie du der doku entnehmen kannst muss die url folgendes format haben: jdbc:h2:tcp://<server>[:<port>]/<databaseName>

ich bin mir sicher wenn du das bei dir änderst wird es laufen. wobei ich es verwunderlich finde dass es deiner aussage nach mal funkioniert und mal nicht ...
 
Also über meinen Editor lief das ganze. Ich konnte allerdings die DB auch über die Weboberfläche starten. Es handelt sich hierbei um zwei unterschiedliche DB's, die unglücklicherweise gleich heissen. Jetzt sind zwar die tabels futsch, aber da schreib ich mir ne kleine Klasse, wo ich dann CREATE TABLE mache.

Danke für Deine schnelle und sehr kompetente Antwort.
 
@ HoaX

Jetzt habe ich folgendes Problem:

Ich habe ein Jar-File erstellt. Solange ich dieses Jar-File innerhalb meines Projektordners vom JCreator starte, funktioniert die Anbindung zur Datenbank und ich kann die Daten lesen, schreiben, löschen.

Lege ich das Jar-File irgendwo anders auf die Festplatte, kann er die Daten aus der Datenbank nicht lesen. Ich bekomme dann nur die Fehlermeldung:
Tabelle XYZ nicht gefunden.

Woran kann das jetzt wieder liegen?

Die connection sieht jetzt wie folgt aus:

Code:
 connection = DriverManager.getConnection("jdbc:h2:tcp//localhost/test", "sa", "");
 
Wenn ich jetzt in dem anderen Verzeichnis auch CREATE TABLE mache, dann klappt es.

Daraus habe ich jetzt folgendes Verständnisproblem:

Angenommen, ich lege jetzt jedem Anwender dieses JAR-File mit meiner Applikation hin, dann hat ja jeder Anwender eine eigene DB bei sich liegen. Das will ich ja nicht. Die DB liegt auf dem Server (also auf einem anderen Rechner) und der Anwender meldet sich auf dieser DB mit meinem JAR-File an.

Hab ich da einen Denkfehler?
 
Habs jetzt geschafft, in dem ich den ganzen Pfad angegeben habe, wo die DB liegt.

Jetzt habe ich noch folgende Verständnisfrage:

Angenommen, die DB liegt unter D:\tcp\localhost.

Dann sieht das im Code wie folgt aus:

Code:
connection = DriverManager.getConnection("jdbc:h2:D:/tcp//localhost/test", "sa", "");

Jetzt weiss ich aber nicht, wo Kunde A seine DB hinlegt oder wo Kunde B seine DB hinlegt. Ich habe ein kleines Konfigurations-GUI geschrieben, in der ich also den Pfad abfrage und in eine .dat reinschreibe. In meiner Login-Klasse für den einzelnen Anwender liegt aber im jar-File. Wenn ich jetzt die connection-String zusammenbastel, bekomme ich doch mit der Datei .dat in Konflikt, da die ja außerhalb des jar-Files liegt.

Wer kann mir da helfen?
 
durch deine ursprungsurl dachte ich du wolltest auf eine zentrale datenbank zugreifen?!

HoaX hat gesagt.:
wie du der doku entnehmen kannst muss die url folgendes format haben: jdbc:h2:tcp://<server>[:<port>]/<databaseName>
das ist für eine url die zu einem zentralen server zeigt. alle anderen formate findest du in der gelungenen doku. du hast wieder einen schreibfehler eingebaut in deiner ...
 
@ HoaX

Ja, ich will das in einer zentralen Datenbank haben. Die Datenbank liegt auf localhost. Mein Problem jetzt:

Wenn ich sage
Code:
jdbc:h2:tcp://localhost/test

findet er die Datenbank solange ich mich in meinem Projektordner befinde. Lege ich das JAR-File auf D:/irgendein_Ordner, kann er zwar eine Verbindung aufbauen, findet aber keine Tabellen, die ich angelegt habe. Was muss ich da machen? 🙁
 
eigentlich sollte das gehn. außer du startest den server in der selben anwendung. dann erstellt die natürlich die datenbank relativ zum aktuellen pfad. und der hat sich ja geändert.
 
@ HoaX

Wenn ich jetzt
Code:
 jdbc:h2:tcp://localhost/test
mache und lege das jar-File und D:\irgendein_Ordner, legt er den Ordner tcp\localhost an. Dort werden dann alle db-Files angelegt. Dann fehlen ihm natürlich sämtliche Tabellen.

Mal angenommen, H2 ist unter c:\Programme\H2 installiert und die zentrale Datenbank liegt im Unterverzeichnis bin. Wenn ich dann wie folgt sage:



Code:
String pfad = "C:/Programme/H2/bin";
connection = DriverManager.getConnection("jdbc:h2:" + pfad + "/tcp//localhost/test", "sa", "");

Das funktioniert dann. Im Verzeichnis C:/Programme/H2/bin liegt dann noch ein Ordner tcp, darin wiederum ein Unterordner localhost. Und da liegen alle db-Daten. 🙁
 
Also in der Dokumentation steht folgendes für das Starten aus der Comandozeile:

java org.h2.tools.Server

Leider funzt das nicht, weil er die Klasse nicht findet. Muss ich da in einem bestimmten Verzeichnis sein?

Das das nicht funktioniert hat, habe ich mir eine kleine Java-Klasse geschrieben, die ich vor Start des jar-Files starte:

Code:
import org.h2.tools.Server;
import java.awt.*;
import javax.swing.*;
import java.sql.*;

public class Server_starten
{
    
    public static void main(String [] args)
    {
    	try
    	{
    		// start the TCP Server
			Server server = Server.createTcpServer(new String[]{"-tcp//localhost/", "true"}).start();
    	}
    	catch(SQLException e)
		{
			JOptionPane.showMessageDialog(null, "Der Server konnte nicht gestartet werden: " + e,
			"DB-Fehler", JOptionPane.ERROR_MESSAGE);
		}
    }
    
    
}

So funktioniert das auch nicht. Wie würdest Du das machen?
 
Den Server hab ich jetzt starten können. Aber das Problem bleibt trotzdem. Wenn ich das jar-File auf D:\ lege, wird immer noch ein Ordner tcp angelegt und die Anwendung kann die Tabellen nicht finden auf die ich zugreife (klar auch, wenn die Datenbank unter C:\Programme\H2\bin\tcp liegt und nicht unter D:\tcp.) 🙁
 
wenn er da verzeichnisse anlegt ist deine url in client falsch. die dürfen nur von der anwendung angelegt werden wo server ist.
 
@ HoaX

Ich habe die Datenbank wie folgt zunächst installiert:

C:/Programme/H2/bin

Um den Server zu starten gehe ich wie folgt vor:

1) cmd aufrufen
2) in c:\Programme\H2\bin\ wechseln
3) Befehl ausführen:
java - cp h2.jar org.h2.tools.Server

Dann wird einmal die Kommandozeile gestartet und einmal die Weboberfläche. In der Weboberfläche steht oben in der Leiste

Dann im Login-Fenster steht unter JDBC URL

jdbc:h2:tcp://localhost/test

Was mache ich da falsch?
 
Man sollte den Punkt auch an der richtigen Stelle setzen:

Statt
Code:
connection = DriverManager.getConnection("jdbc:h2:tcp//localhost/test", "sa", "");
sollte man auch
Code:
connection = DriverManager.getConnection("jdbc:h2:tcp//localhost/test", "sa", "");[quote] schreiben :oops:  :roll: [/quote]
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben