2013-03-03 29 views
8

Ich benutze JAVA (mit Eclipse Juno) und versuche, eine ausführbare JAR-Datei zu erstellen, die sqlite DB-Datei enthält. Ich habe versucht Verbindung zum DB durch diese Linie zu bekommen:sqlite DB zu ausführbarer JAR-Datei hinzufügen

DriverManager.getConnection("jdbc:sqlite:"+DataController.class.getResource("test.sqlite").getPath()) 

Die Datacontroller ist eine Klasse, die SQLite befindet sich wo.

und ich halte eine Fehlermeldung erhalten:

java.sql.SQLException: invalid database address 

Hat jemand helfen kann und Schritt für Schritt geben Anweisungen, wie SQLite DB innerhalb einer ausführbaren JAR-Datei enthalten?

+0

Dieser Fehler tritt auf, wenn die angegebene Datenbank-URL ungültig ist. Versuchen Sie, die Zeichenfolge zu drucken, die Sie an 'getConnection()' geben. –

+0

Ich habe es bereits ausgedruckt und es ist der genaue Pfad zur SQLite DB. – gran33

Antwort

10

Anscheinend sqlite-jdbc kann Ressourcen auf eigene Faust öffnen. Fügen Sie pro Thread https://groups.google.com/forum/?fromgroups=#!topic/xerial/Oayzj5nrJGk: Ressource zum Pfad hinzu. Also versuchen Sie folgendes:

DriverManager.getConnection("jdbc:sqlite::resource:package/test.sqlite"); 

Ersetzen Paket mit dem ‚/‘ getrennt Pfad zu dem Paket diese Datei in ist

Beachten Sie, dass es tatsächlich die Datei in einem tmp kopiert directory.-

.
+0

Ich lese das mit jdbc: sqlite :: resource: die db ist schreibgeschützt. – Paolo

+0

Wenn sich Ihre Datenbank (wie meine) einfach im Verzeichnis * resources * Ihres Projekts befindet, genügt die folgende Verbindungszeichenfolge: 'jdbc: sqlite :: resource: test.sqlite' oder' jdbc: sqlite :: resource: test .db' hängt von Ihrer Version von SQLite ab.Ich habe viel zu viel Zeit damit verbracht, das herauszufinden. Der 'resource'-Zusatz zum URI ist, was es funktioniert hat, denn ohne es nimmt der Treiber an, dass sich Ihre Datenbank im selben Verzeichnis wie die Datei befindet, die mit ihr verbunden ist. –

+0

Ich folge diesem und habe eine Ausnahme java.sql.SQLException: resource quanlythuchi3.sqlite nicht gefunden: java.net.MalformedURLException: no protocol: MyDB.sqlite – Andiana

0

Die ::resource Weg ist richtig. Und diese Erklärungen werden helfen, wenn Sie ::resource verwenden, aber immer noch Fehler wie resource database.db not found: java.net.MalformedURLException: no protocol: database.db wie verdana erhalten.

Meistgenannte anwsers ist: DriverManager.getConnection("jdbc:sqlite::resource:path/to/database.db")

jedoch die path/to/database.db der genaue Pfad sein muss (der Pfad in Echt File System aber nicht in Jar) Ihre JAR-Datei.

Ich empfehle getClass().getResource() zu verwenden:

DriverManager.getConnection("jdbc:sqlite::resource:" + 
     getClass().getResource("/path/to/db/in/the/jar/file")) 

HINWEIS: die /path/to/db/in/the/jar/file Teil mit /

0

beginnen muss ich nicht sicher bin, ob dies in den letzten JDBC-Versionen geändert hat, aber nachdem er mit Hantieren es für etwa eine Stunde und erhalten verschiedene Ausnahmen (MalformedURLException und "Datenbank wurde geschlossen"), fand ich, dass das folgende für mich funktionierte:

DriverManager.getConnection("jdbc:sqlite::resource:file:/path/to/database.db") 

Der: file: Teil scheint von anderen Antworten zu fehlen und ich konnte es nicht ohne es funktionieren.

Beachten Sie auch, dass die

/path/to/database.db 

der absolute Pfad ist von der Wurzel der .jar-Datei starten, anstatt einer normalen Ressource Wurzel.

Verwandte Themen