从JAR文件中包含的应用程序访问H2数据库

时间:2014-10-26 17:15:09

标签: java 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,因为没有找到表。任何提示如何让我的Connection运行到Eclipse和JAR文件中?
请注意,作为要求,我不应该使用数据库的绝对路径,而是使用相对路径,因为Application Installer会将数据库文件夹与jar文件一起解压缩。

1 个答案:

答案 0 :(得分:1)

我可以考虑一些可能的错误原因:

  • 数据库为空。您可能在eclipse下构建应用程序时填充它,但是当从jar文件启动时,您会遇到一个空的:使用H2控制台控制它,如果数据库是空的,则在发布时填充数据库或者放置完全初始化的数据库和罐子一起。
  • 当您提供数据库的相对路径时,实际路径取决于当前工作目录。这很不寻常且容易出错。您最好提供一个绝对路径,可以在环境变量或java系统属性中找到:它仍然可配置但更多显式

对于第二种可能性,如果找不到,H2会自动创建一个新数据库。为避免在路径错误时自动创建,您可以将;IFEXISTS=TRUE添加到网址:"jdbc:h2:file:data/sample;IFEXISTS=TRUE"。但如果可以的话,请避免相对路径......