2014-10-26 153 views
1

我有一個使用H2數據庫的應用程序和下面的連接字符串:訪問H2數據庫

Connection connection = DriverManager.getConnection("jdbc:h2:file:data/sample", "sa", ""); 

它的工作原理相當不錯的Eclipse下,但是如果我包中的Java桌面應用程序一個JAR文件,它無法再在數據/樣本中找到H2數據庫。這裏是正在運行的目錄:

application.jar 
data | 
    sample.h2.db 

這裏是我如何努力來執行應用程序:因爲沒有表發現

java -classpath .; -jar application.jar 

SQLException的提高。任何提示如何讓我的連接運行到Eclipse和JAR文件中?
請注意,根據要求,我不應該爲數據庫使用絕對路徑,而應該使用相對路徑,因爲數據庫文件夾與應用程序安裝程序一起解壓縮到jar文件。

+0

你可以發佈stacktrace嗎?而在你的類路徑中我沒有看到'h2.jar'。 – vanje 2014-10-26 19:00:06

回答

1

有錯誤的一些可能的原因我能想到的:

  • 數據庫是空的。在eclipse下構建應用程序時,您可能會填充它,但是從jar文件啓動時,您會點擊一個空的:使用H2控制檯的控件,並且在啓動時填充數據庫(如果它爲空或者將完全初始化的隨着罐子。
  • 當您給出數據庫的相對路徑時,實際路徑取決於當前的工作目錄。這很不尋常,容易出錯。你最好給出一個絕對路徑,可能在一個環境變量或在Java系統屬性中找到:它仍然是配置的,但更多的明確

對於第二種可能性,H2會自動創建一個新的數據庫,如果它沒有找到它。爲了避免在路徑錯誤時自動創建,您可以將;IFEXISTS=TRUE添加到網址:"jdbc:h2:file:data/sample;IFEXISTS=TRUE"。但如果你可以避免相對路徑...

+0

謝謝,我發現我在第一次啓動應用程序時在類路徑中犯了一個錯誤。所以發生的是數據庫文件被覆蓋(重新創建)。我將添加到IFEXISTS = TRUE參數的路徑 – user2824073 2014-10-27 08:05:10