在Jar内部打包并使用嵌入式数据库(H2.db文件)?

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

是否可以在Jar中嵌入数据库,并且能够INSERT新记录以及SELECT out?

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

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

话虽如此,下面是如何将其嵌入只读的解释。

根据H2的文件 :

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

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

如果将h2.db文件嵌入.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

然后,您可以将其作为String进行操作,并将其作为JDBC URL连接传递给H2。