簡體   English   中英

將sqlite DB添加到可執行的JAR文件中

[英]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的根目錄中。 我正在使用mavennotepadd ++開發

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM