我正在为我的应用程序使用H2嵌入式数据库。我想在其自己的Jar中包含应用程序所需的所有内容,如果可能的话,包括它的数据库。我的应用程序不需要创建临时文件或任何东西,所以基本上用户只运行Jar。
是否可以在Jar中嵌入数据库,并且能够INSERT
新记录以及SELECT
出来?
编辑:只是为了澄清,我不打算将H2驱动程序jar嵌入到我的可分发jar中,我希望将h2数据库文件(someDatabase.h2.db
文件)嵌入到Jar中并仍然能够从该数据库写入/读取。
答案 0 :(得分:9)
如果您希望将myDatabase.h2.db
文件嵌入.jar
,您可以这样做,但您将拥有对数据库的只读权限。由于.jar
文件是只读的,因此无法修改它们,因此无法执行INSERT
,DELETE
或任何DDL命令。
话虽如此,下面是关于如何以只读方式嵌入它的解释。
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
在“Read Only Databases in Zip or Jar File”中查看更多内容。
当您将文件作为资源嵌入jar中时,您可能会获得它的相对URL。使用...
MyClass.class.getClassLoader().getResource("myDatabase.h2.db")
......你会得到类似的东西:
jar:file:/C:/folder1/folder2/myJar.jar!/myDatabase.h2.db
然后,您可以将其作为String进行操作,并将其作为JDBC URL连接传递给H2。