# SQLite in JAR



## Scruffy (15. Feb 2010)

Gibt es eine Möglichkeit eine SQLite Datenbank in der JAR Datei, in der auch das Programm verpackt wird, zu verpacken und die zur Laufzeit zu benutzen?


----------



## kama (15. Feb 2010)

Hallo,

schau mal hier:

SQLJet :: Pure Java SQLite

MfG
Karl Heinz Marbaise


----------



## Scruffy (15. Feb 2010)

Schon mal gesehen. Ich würde aber doch schon ganz gerne einen JDBC Treiber nutzen, wegen SQL. Unter diesem Link geht das nicht.


----------



## kama (15. Feb 2010)

Hallo,



Scruffy hat gesagt.:


> Schon mal gesehen. Ich würde aber doch schon ganz gerne einen JDBC Treiber nutzen, wegen SQL. Unter diesem Link geht das nicht.


Sorry hatte ich nicht dran gedacht...

wie wäre es damit:
SQLiteJDBC

MfG
Karl Heinz Marbaise


----------



## Scruffy (16. Feb 2010)

Ja, den hab ich schon heruntergeladen. Das Problem ist wenn ich versuche auf die Datenbankdatei zuzugreifen: Wenn diese "irgendwo" auf der Festplatte liegt bekommt ich den Zugriff hin, sobald diese Datei aber im JAR verpackt wird, weiß ich nicht wie ich darauf zugreifen kann.

Was muß ich an die folgende Stelle mit dem "Test.db" schreiben? Die Test.db liegt im Package database.

```
Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
```


----------



## dmike (16. Feb 2010)

Jein du kannst normalerweise aus einem Jar kein Klassen eines anderen Jars aufrufen, selbst wenn sich beide zusammen in ein und dem selben ÜberJar befinden. im unterschied zu WAR Archiven. .... Offiziel unterstützt das der URL Mechanismus der Jarloaders einfach nicht.

Das geht trotzdem halbwegs...  aber dann nur mit diversen fiesen Tricks (URL rewriting). Aber auch nur mit reinen Java Klassen. Sobald eine native Lib dabei ist, hört der Spaß auf. Native Libs müssen in Filesystem ausgepepackt werden und können nur von dort geladen werden.

Also das billigste Verfahren  ist einfach  du unzippst das gesamt Jar irgendwo in ein Temp Verz. und lädst von dort die Klassen ganz Normal über das Filesystem ein. 

Note:  Alles was JDBC betrifft läuft dann im Scope deines Classloaders. Klassen die vom Classloader der JVM beimbootstrap geladen wurden haben evtl. keinen Zugriff auf deinen JDBC Scope. Das müsstes du dann mit Interfacen und Proxies lösen.


----------



## mvitz (16. Feb 2010)

Glaube ihr habt ihn noch nicht ganz verstanden. Ihm gehts afaik gar nicht darum, auf irgendwelche Jar Dateien oder Java Klassen zuzugreifen, sondern auf die Datenbankdatei, die SQLLite benutzt.

Mein Vorposter hatte allerdings recht darin, dass die Manipulation von Dateien innerhalb eines JARs zur Laufzeit nicht möglich ist. Dir wird also nichts weiteres übrig bleiben, als die Datenbankdatei irgendwo außerhalb zu platzieren.


----------



## HoaX (16. Feb 2010)

Muss es denn unbedingt SQLite sein? Derby und Konsorten sollten alle auch mit Datenbanken innerhalb eines Jars umgehen können. (Nur lesend!)


----------



## Scruffy (18. Feb 2010)

Danke für die Antworten. Dann werde ich die Datei außerhalb des Archives plazieren müssen.

Auch andere DB's können in dem Fall anscheind nicht schreibend darauf zugreifen.


----------

