JDBC: Relative Pfadangabe in JAR

eLogic

Aktives Mitglied
Hallo Forum,

ich habe ein Problem:

Ich will eine Verbindung mit einer Datenbank herstellen die sich in der JAR befinden soll.
Ich habe die db in ein Ordner /ext erstellt, und den Ornder dem BuildPath hinzugefügt.

Java:
	Connection cn = DriverManager.getConnection("JDBC:SQLITE:/c:/db.sqlite, "", "" );

wenn ich einen Absoluten Pfad angebe funktioniert alles, aber wie gebe ich die DB Relativ an?

wenn ich das hier dranhänge dann kopiert er immer die db leer raus:

Java:
private String getDbPath() throws InterruptedException{
		URL pfadLocation;
		String returner;
			pfadLocation = ClassLoader.getSystemResource("db.sqlite");
			returner = pfadLocation.getFile().toString().replace("file:/","");

		return "jdbc:sqlite:"+returner;
	}

// ============
	Connection cn = DriverManager.getConnection(getDbPath(), "", "" );
 
Wie sieht dein Class-Path in der MANIFEST.MF aus?

Entweder müsste das aktuelle Verzeichnis hinzugefügt sein:
Class-Path: .
Pfadangabe in Sourcecode: ./ext/Dateiname

Oder das Verzeichnis ext:
Class-Path: ./ext
Pfadangabe in Sourcecode: ./Dateiname
 
Was gibt dir folgender Code aus?
[c]getClass.getProtectionDomain().getCodeSource().getLocation().toURI()[/c]

URLs soltle man nie direkt in einen String umwandeln, sondern erst über eine URI gehen (toURI), dann musst du auch kein [c]file:[/c] rauswerfen.
 
Was gibt dir folgender Code aus?
[c]getClass.getProtectionDomain().getCodeSource().getLocation().toURI()[/c]

Java:
System.out.println(getClass.getProtectionDomain().getCodeSource().getLocation().toURI());

getClass ist rot unterkringelt =)


Wenn ich die db jetzt über
Java:
Connection cn = DriverManager.getConnection("jdbc:sqlite:"+ClassLoader.getSystemResource("db.sqlite").toURI().getPath());

einbinde, funktioniert es in der IDE, wenn ich es aber als Jar exportiere, bekomme ich "null" zurück?
 
Zuletzt bearbeitet:
[c]DeineKlasse.class.getProtectionDomain().getCodeSource().getLocation().toURI()[/c]

Wenn du die Db in die Jar reinpackst bekommst du sowieso Probleme.
 
Neben die Jar sollte die DB gelegt werden 😉

Mit dem Code bekommst du ja zumindest mal den Pfad der Jar bzw. der Klassen, von dort aus kannst du ja dann einen relativen Pfad angeben.
Solltest das aber eben unbedingt sowohl in Eclipse aber auch als Jar testen.
 
Wenn ich das dann in einen Absoluten Pfad umwandle mit c:/bla.jar!db.sqlite
funktioniert das nicht der kopiert mir die dann jedes mal wieder raus und legt sie eben neben die Jar...

Ich muss später wenn ich das fertig habe noch einstellungen mit properties machen... soll ich die dann auch neben die jar legen?
Kan ich die nicht in dei jar mit einbinden?

Wenn ich mein Programm dann verteilen will muss ich ja einen ganzen Ordner abgeben, statt eine Jar?
 
Kan ich die nicht in dei jar mit einbinden?
Nein.

1. Man kann laufende JArs nicht ändern.
2. Jars sind Zip dateien, Zip dateien können nicht geändert werden sondern müssen neu erzeugt werden.

Wenn ich mein Programm dann verteilen will muss ich ja einen ganzen Ordner abgeben, statt eine Jar?
Kommt darauf an.
- Deine Jar könnte prüfen ob schon eine DB & Properties im Ordner leigen, wenn nicht -> neu anlegen.
- Du verteilst ein Ziparchiv das nur entpackt werden muss oder gleich über einen installer
 
selbst wenn du das mit dem lesen aus der jar hinbekommst, spätestens beim schreiben in die db, die in der jar liegt, wirds schwierig 🙂
 
?

Ein Installer ist ein Programm (oft mit GUI) welches Software auf einem Rechner installiert, die Luxusvariante eines entpackten Archives eben.
 
😀 Okey so genau wollt ich das auch nicht erklärt haben =)

Ich meine gibt es irendwie vorgefertigte Module dafür oder muss man alles selber Programmieren?
 

Zurück
Oben