[英]add sqlite DB to executable JAR file
我正在使用JAVA(使用eclipse juno)並嘗試創建一個包含sqlite DB文件的可執行JAR文件。 我試圖通過這一行獲得與DB的連接:
DriverManager.getConnection("jdbc:sqlite:"+DataController.class.getResource("test.sqlite").getPath())
DataController是一個位於sqlite所在位置的類。
我一直得到一個錯誤:
java.sql.SQLException: invalid database address
有人可以幫助並提供有關如何在可執行JAR文件中包含sqlite DB的分步說明嗎?
顯然sqlite-jdbc可以自己打開資源。 根據此主題https://groups.google.com/forum/?fromgroups=#!topic/xerial/Oayzj5nrJGk ,將:resource添加到路徑中。 請嘗試以下方法:
DriverManager.getConnection("jdbc:sqlite::resource:package/test.sqlite");
或取決於sqlite的版本
DriverManager.getConnection("jdbc:sqlite::resource:package/test.db");
用'/'分隔的路徑替換包到此文件所在的包。
請注意,它實際上會將文件復制到tmp目錄.-
::resource
方式是對的。 如果您正在使用::resource
但這些解釋將有所幫助,但仍然會resource database.db not found: java.net.MalformedURLException: no protocol: database.db
錯誤resource database.db not found: java.net.MalformedURLException: no protocol: database.db
like verdana。
最常見的anwsers是: DriverManager.getConnection("jdbc:sqlite::resource:path/to/database.db")
但是, path/to/database.db
必須是jar文件中的確切路徑( 實際文件系統中的路徑,但不在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版本中是否已經改變了,但在使用它大約一個小時並獲得各種異常(MalformedURLException和“數據庫已關閉”)后,我發現以下內容對我有用:
DriverManager.getConnection("jdbc:sqlite::resource:file:/path/to/database.db")
:file:部分似乎從其他答案中丟失了,如果沒有它我就無法工作。
另外,請注意
/path/to/database.db
是從.jar文件的根開始的絕對路徑,而不是普通的資源根。
jdbc:sqlite::resource:notes_app.db
為我工作。 我的數據庫(notes_app.db)位於生成的jar文件的根目錄中。
public class Database {
public static Connection con () throws SQLException {
String url = "jdbc:sqlite::resource:notes_app.db";
return DriverManager.getConnection(url);
}
}
我的notes_app.db位於生成的jar的根目錄中。 我正在使用maven和notepadd ++開發
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.