一个罐子内包和使用嵌入式数据库(H2.db文件)?(Package and use embedded

2019-08-22 08:46发布

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

是否有可能嵌入JAR中具有数据库,并能够INSERT新的记录,以及刚刚SELECT了呢?

编辑:只是为了澄清,我不希望嵌入我分发的JAR内的H2司机罐子,我期待嵌入H2数据库文件( someDatabase.h2.db文件)一个罐子内,仍能够写/从数据库中读取。

Answer 1:

如果你想嵌入myDatabase.h2.db内部文件.jar ,你可以这样做,但你必须只读访问数据库。 由于.jar文件是只读的,您不能对其进行修改,因此不能执行INSERTDELETE或任何DDL命令。

话虽这么说,下面是关于如何把它嵌入只读的解释。

根据H2的文档 :

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

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

如果您嵌入h2.db一个内部文件.jar ,它不是一个简单的方式访问。 它只是作为一个zip文件中的文件访问。

为了使H2 USET它,你必须使用一个zip的网址:

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

查看更多在“ 阅读zip或jar文件只有数据库 ”。

当您嵌入文件作为罐子的资源,你可能会得到它的相对URL。 使用...

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

......你会得到这样的:

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

然后,您可以操纵它作为一个字符串,并通过为JDBC URL连接到H2。



文章来源: Package and use embedded database (H2.db file) inside a Jar?