2011-11-20 97 views
2

我一直試圖讓這個工作兩天,並嘗試了所有我能找到的建議。唉,迄今爲止沒有成功。我怎樣才能指定一個RELATIVE JDBC SQLite url(路徑?)

這就是我想要做的:我正在構建一個小的(java swing)桌面數據庫應用程序。我使用NetBeans 7.0和SQLite,發現JDBC驅動程序從http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC罰款,只要工作,我指定的JDBC URL的絕對路徑:

jdbc:sqlite://Users.../lib/db/ithildin.db 

這裏是它的外觀在NetBeans的服務 - >數據庫標籤中,使用絕對URL:

so far, so good

打開連接,然後將表節點示出了可用的表。

但是因爲我打算將這個應用程序分發給其他人,所以使用絕對路徑是行不通的。從我在這裏和那裏閱讀的內容看,似乎也可以指定一個到SQLite數據庫文件的相對路徑,但我無法讓它工作,無論我嘗試什麼。

奇怪的是,當我在Netbeans中創建連接時,最初似乎工作時,我將sqlite jdbc驅動程序jar和sqlite數據庫文件放在/ lib(位於Netbeans項目目錄中)的/ db子目錄中, :

Netbeans new connection wizard

,當我打開新的連接它認爲錯覺 -

looking good

但是當我打開「表」節點事實出是空的:

uh oh

與之相似,此連線似乎有效,但只要我嘗試使用它 - 例如在「生成實體類從數據庫」它告訴我,有沒有任何該數據庫中的表。

有沒有人知道一個出路呢?我非常感謝。

Luthien的

回答

1

我已經按照你具有相同的步驟和我的研究結果表明,在新建連接嚮導的相對路徑是相對於NetBeans的工作目錄這是NetBeans安裝的目錄。

例如,在連接字符串中,您將「連接」到位於<NetBeans-Install-Dir>/ithildin-13-11-11.db的數據庫。由於這個數據庫不存在,SQLite正在爲您創建它,這會給您帶來您所看到的「幻覺」。在我的測試中,我試圖用相對路徑連接的數據庫是在NetBeans安裝目錄中創建的。

換句話說,一切都按設計工作。

在您的代碼中,您可以使用相對路徑,並且應該相對於項目目錄的頂部。在NetBeans的數據庫服務中,您需要使用絕對路徑連接存在的數據庫(在您的項目中),否則您將需要提供一個從NetBeans安裝目錄開始的相對路徑。

我的建議是,您在代碼中使用相對路徑,並在新建連接嚮導中使用絕對路徑。

+0

嗨,非常感謝!我檢查了'ithildin-13-11-11.db'的空副本,實際上,我發現它 - 儘管不在Netbeans安裝目錄中,但在項目根目錄中。這可能是因爲我在Mac上,「Netbeans安裝目錄」是一個打包的.app文件。我會嘗試一下PU中相對路徑的建議,以及DB連接選項卡中的絕對路徑。再次感謝!! –

+0

我剛剛嘗試過,它的工作原理與您所描述的完全相同(除了它似乎沒有安裝目錄) - 事實證明,數據庫連接選項卡中的相對路徑不起作用,但它在PU中工作persistence.xml中。如果應用程序都正常,應用程序似乎會自動選擇工作連接,否則它會選擇正確的連接。所以這似乎工作正常,就像這樣:我希望它仍然在部署的應用程序:) –

+0

很高興我能提供幫助。不要忘記將此答案標記爲已接受,以便其他人知道您的問題已得到解答。 –