我使用H2嵌入式数据库为我的申请。 我想一切都包含在它自己的罐的应用需求, 包括它的数据库如果可能的话。 我的应用程序并不需要创建临时文件或任何东西,所以基本上用户只需运行该罐。
是否有可能嵌入JAR中具有数据库,并能够INSERT
新的记录,以及刚刚SELECT
了呢?
编辑:只是为了澄清,我不希望嵌入我分发的JAR内的H2司机罐子,我期待嵌入H2数据库文件( someDatabase.h2.db
文件)一个罐子内,仍能够写/从数据库中读取。
我使用H2嵌入式数据库为我的申请。 我想一切都包含在它自己的罐的应用需求, 包括它的数据库如果可能的话。 我的应用程序并不需要创建临时文件或任何东西,所以基本上用户只需运行该罐。
是否有可能嵌入JAR中具有数据库,并能够INSERT
新的记录,以及刚刚SELECT
了呢?
编辑:只是为了澄清,我不希望嵌入我分发的JAR内的H2司机罐子,我期待嵌入H2数据库文件( someDatabase.h2.db
文件)一个罐子内,仍能够写/从数据库中读取。
如果你想嵌入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引擎查找名称为数据库文件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。