繁体   English   中英

从类路径打开 H2 数据库

[英]Open H2 Database from Classpath

我从 H2 文档中看到您可以在 classpath 上打开文件

我在打开连接时尝试了各种 URL(例如jdbc:h2:classpath:/myDatabase ),但似乎没有找到资源 - 但是当我尝试MyClass.class.getClassLoader().getResourceAsStream("myDatabase")它可以觉得还好。

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

任何想法我做错了什么?

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

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

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

当您将应用程序打包为JAR或WAR时,此功能将无效。 在这种情况下, myDatabase将打包在一个ZIP存档中,以引用此帖子

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

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

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

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

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

您可以在下面看到以下路径:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM