10

我正在为我的应用程序使用 H2 嵌入式数据库。我想在它自己的 Jar 中包含应用程序所需的一切,如果可能的话,包括它的数据库。我的应用程序不需要创建临时文件或任何东西,所以基本上用户只需运行 Jar。

是否可以将数据库嵌入到 Jar 中,并且可以直接输出INSERT新记录SELECT

编辑:澄清一下,我不希望将 H2 驱动程序 jar 嵌入到我的可分发 jar 中,我希望将 h2 数据库文件(someDatabase.h2.db文件)嵌入到 Jar 中,并且仍然能够从该数据库中写入/读取。

4

1 回答 1

11

如果您希望将myDatabase.h2.db文件嵌入到 中.jar,您可以这样做,但您将拥有对数据库的只读访问权限。由于.jar文件是只读的,因此您无法修改它们,因此无法执行INSERTDELETE任何 DDL 命令。

话虽如此,下面是有关如何以只读方式嵌入它的说明。

根据H2 的文档

JDBC URL"jdbc:h2:~/myDatabase"告诉 H2 引擎在当前用户myDatabase.h2.db主目录中查找一个数据库文件。

JDBC URL告诉 H2 引擎在当前目录(执行 java 程序的位置)中"jdbc:h2:file:/myDatabase"查找名为的数据库文件。myDatabase.h2.db

如果将h2.db文件嵌入到 a.jar中,则无法以普通方式访问它。它只能作为 zip 文件中的文件访问。

为了使 H2 使用它,您必须使用 zip 作为 URL:

jdbc:h2:zip:~/data.zip!/test

在“ Zip 或 Jar 文件中的只读数据库”中查看更多信息。

当您将文件作为资源嵌入到 jar 中时,您可能会得到它的相对 url。使用...

MyClass.class.getClassLoader().getResource("myDatabase.h2.db")

...你会得到类似的东西:

jar:file:/C:/folder1/folder2/myJar.jar!/myDatabase.h2.db

然后,您可以将其作为字符串操作并作为 JDBC URL 连接传递给 H2。

于 2013-04-12T15:38:13.740 回答