2013-03-03 33 views
8

JAVAを使用しています(eclipse junoを使用しています)、sqlite DBファイルを含む実行可能なJARファイルを作成しようとしています。私はこのラインでDBへの接続を取得しようとしました :実行可能なJARファイルにsqlite DBを追加

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

DataControllerはsqliteのがありますどこにあるクラスです。

と私はエラーを取得維持:

java.sql.SQLException: invalid database address 

誰かが助けと実行可能JARファイル内にsqliteのDBを含める方法についてステップバイステップのインストラクションを与えることができていますか?

+0

このエラーは、指定したデータベースURLが無効な場合に発生します。 'getConnection()'に与えた文字列を出力してみてください。 –

+0

これはすでに印刷されていて、sqlite DBへの正確なパスです。 – gran33

答えて

10

明らかに、sqlite-jdbcはそれ自身のリソースを開くことができます。このスレッドごとにhttps://groups.google.com/forum/?fromgroups=#!topic/xerial/Oayzj5nrJGk、リソースにパスを追加します。だから、次のことを試してください。

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

このファイルが入っているパッケージに「/」で区切られたパスでパッケージを交換

それは実際にtmpのdirectory.-

にファイルをコピーすることに注意してください。
+0

私はjdbc:sqlite :: resourceを使ってそれを読んでいます.dbは読み込み専用です。 – Paolo

+0

あなたのデータベース(私のような)があなたのプロジェクトの* resources *ディレクトリにあれば、 'jdbc:sqlite :: resource:test.sqlite'または' jdbc:sqlite :: resource:test:以下の接続文字列で十分です。あなたのSQLiteのバージョンに応じて.db'を作成します。私はこれを理解しようとするのに時間をかけすぎました。 URIに 'resource 'を追加すると、それが動作します。それがなければ、ドライバはdbが接続しているファイルと同じディレクトリにあるとみなします。 –

+0

私はこれに続き、例外java.sql.SQLExceptionがあります:リソースquanlythuchi3.sqliteが見つかりません:java.net.MalformedURLException:プロトコルなし:MyDB.sqlite – Andiana

0

::resource道は正しいです。 ::resourceを使用していて、まだverdanaのようなエラーresource database.db not found: java.net.MalformedURLException: no protocol: database.dbが表示される場合は、これらの説明が役立ちます。

最も一般的なanwsersです: DriverManager.getConnection("jdbc:sqlite::resource:path/to/database.db")

path/to/database.dbがあなたのjarファイルへの正確なパス(実ファイルシステムではなく、ジャーでパス)でなければなりませんが。

私はgetClass().getResource()を使用することをお勧めします。

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

/path/to/db/in/the/jar/file一部私は、これは最近のJDBCのバージョンで変更されているかどうかわからないんだけど/

0

で始まりますが、いじる後にしなければなりませんそれは約1時間、さまざまな例外(MalformedURLExceptionと「データベースが閉じられました」)が発生したため、私は以下のことがわかった:

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

:ファイル:部分が他の回答から欠落しているように見えて、それがなくても動作しないようです。

また、

/path/to/database.db 

は.jarファイルのルートではなく、通常のリソースルートから始まる絶対パスであることに注意。

関連する問題