# HSQL problem jar erstellung



## Der_Raser (23. Mai 2008)

Hallo,
ich habe mein Projekt mit eclipse als .jar exportiert.
Da ich im Build path ja die hsqld.jar angegeben hab, habs ich mit fatjar exportiert.

Somit bekomm ich beim starten zwar ne verbindung zur datenbank, kann aber nix einfügen
oder etwas aus der datenbank lesen.

Die Pfadangabe bei der Connection hab ich relativ


```
con = DriverManager.getConnection("jdbc:hsqldb:file:ressources/mciDB/mci", "sa", "");
```

Wenn die Pfadangabe absolut ist, funktioniert alles perfekt.

Allerdings weiß ich später nicht in welchem Ordner die jar sein wird,
deshalb sollte es schon relativ sein.

Weiss einer wie ich das richtig an laufen krieg ?


----------



## Guest (23. Mai 2008)

Eine Möglichkeit wäre es zur Laufzeit herauszufinden wo deine .jar liegt. Damit hättest du mal das Directory und von dem kannst dann weiter (relativ) gehen. So mache ich das.

Dazu gabs schon einige Themen. Such mal nach jar und verzeichnis...


----------



## Der_Raser (23. Mai 2008)

also, ich wollte das problem jetzt so lösen:

da es ja mit absoluter pfadangabe geht

```
con = DriverManager.getConnection("jdbc:hsqldb:file:d:/Programme/eclipse/workspace/mci/database/mciDB/mci", "sa", "");
```

hatt ich mir ma ganz schlau gedacht, ich hol mir über 


```
String path = System.getProperty("user.dir") + "/database/mciDB/mci";
```

den pfad zur jar datei.
In path dürfte ja dann auch der absolute pfad drinstehn.

Wenn ich das nun als jar exportiere, funktioniert es aber trotzdem nicht, obwohl
es wenn ich den pfad direkt absolut angeb ja geht.

Achja,
wenn ich dir jar in der Kosole ausführe, mit

```
java -jar mci.jar
```
geht es wieder

Versteht das irgendwie nit so ganz


----------



## xote (24. Mai 2008)

Da muss man aufpassen, user.dir steht soviel ich weiss für das Verzeichnis, aus dem java -jar foobar.jar aufgerufen wurde. Möglicherweise haust du auch sonst irgendwo noch einen Wurm rein...


----------



## semi (24. Mai 2008)

Das user.home Verzeichnis ist dafür besser geeignet. Bei Vista und auch bei Linux (je nach Konfiguration) kriegst
du Probleme in das Programmverzeichnis zu schreiben. Bei Vista z.B. sind dazu Administrator-Rechte nötig.
Klartext: Die Datenbank ist in einem Unterverzeichnis des user.home-Verzeichnises besser aufgehoben.


----------



## xote (24. Mai 2008)

Ja oder er holt sich das directory wo die jar drinliegt, und geht in seinem Programm von dort aus relativ weiter. So mach ich es derzeit, weiss aber nicht, ob es das optimale ist. Bis jetzt funktionierts ganz gut.


----------



## semi (25. Mai 2008)

@xote
Klar, nur wenn du das Programm unter, sagen wir mal "c:\Program Files (x86)", unter Vista installierst und aus 
deinem Programm heraus in diesem Verzeichnis zu schreiben versuchst, kickt dir Vista die Anwendung aus dem
Speicher, wenn du sie nicht als Administrator ausgeführt hast oder die Anwenderkontensteuerung von Vista 
deaktiviert hast (nicht empfehlenswert). Das User-Verzeichnis ist dagegen frei für Müll jeglicher Art. Auch unter 
Linux/Unix empfiehlt es sich "in das gleiche" user.home Verzeichnis zu schreiben. Einfach in ein Verzeichnis
	
	
	
	





```
File dir = new File(String.format("%s/.%s", System.getProperty("user.home"), "anwendungsname"));
```
schreiben und gut ist. Du brauchst dir dann auch keine Gedanken über relative Pfade oder den Installationspfad 
der Anwendung zu machen.


----------



## xote (25. Mai 2008)

Guter Einwand, semi. In das directory muss man natürlich schreiben dürfen. Das mit Vista ist tatsächlich ein Problem. Ich muss zugeben ich selbst programmiere fast nur unter Linux und XP. Da hatte ich bis jetzt (fast) keine Probleme mit Schreibrechten.


----------

