从Classpath打开H2数据库

时间:2018-10-31 16:56:04

标签: java h2

我从H2文档中看到您can open files on the classpath

我在打开连接时尝试了各种URL(例如jdbc:h2:classpath:/myDatabase),但似乎都找不到资源-但是当我尝试使用MyClass.class.getClassLoader().getResourceAsStream("myDatabase")时,可以找到合适的资源。

数据库位于src\test\resources中的类路径上。

有什么想法我在做什么错吗?

3 个答案:

答案 0 :(得分:0)

您可以找到myDatabase文件。在本地运行且未打包时,例如您可以在IDE内部执行以下操作:

URL res = MyClass.class.getResource("/myDatabase");
String url = "jdbc:h2:" + res.toString();

将输出完整的资源路径,例如jdbc:h2:file:/home/.../classes/myDatabase

当您将应用程序打包为JAR或WAR时,此方法将无效。在这种情况下,myDatabase将打包在ZIP归档文件中,以引用this post

  

压缩数据库和数据库中的数据库的主要问题   classpath是:您不能进行真正的随机访问。您只能阅读   流。需要随机访问,因此模拟如下:   当seek(pos)大于当前位置时,将跳过   (基本上是阅读)。如果搜索位置较小,则   流已关闭,然后重新打开。这非常慢。

基于Advanced > Pluggable File System docs的ZIP支持是只读的:

  

zip:基于只读zip文件的文件系统。格式:zip:/ zipFileName!/ fileName。

您可能应该使用命令行参数或系统变量来提供myDatabase的路径,并将其保留在打包的应用程序之外。

答案 1 :(得分:0)

这对我有用...在类路径中创建pher文件夹,“ pharmadatabase”是我的数据库名称。 jdbc:h2:file:pher/~/pharmadatabase;

您可以在下面看到路径-

enter image description here

答案 2 :(得分:0)