在Jar内部打包并使用嵌入式数据库(H2.db文件)?
我在我的应用程序中使用H2嵌入式数据库。 我想在它自己的Jar中包含应用程序所需的一切,如果可能的话, 包括它的数据库 。 我的应用程序不需要创建临时文件或任何东西,所以基本上用户只运行Jar。
是否可以在Jar中嵌入数据库,并且能够INSERT
新记录以及SELECT
out?
编辑:只是为了澄清,我不打算将H2驱动程序jar嵌入到我的可分发jar中,我希望将h2数据库文件( someDatabase.h2.db
文件)嵌入到Jar中并且仍然可以写入/从该数据库中读取。
如果您希望将myDatabase.h2.db
文件嵌入.jar
,您可以这样做,但您将拥有对数据库的只读访问权限。 由于.jar
文件是只读的,因此无法修改它们,因此无法执行INSERT
, DELETE
或任何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。