在可执行 jar 中访问 derby 数据库

Posted

技术标签:

【中文标题】在可执行 jar 中访问 derby 数据库【英文标题】:Access derby database in executable jar 【发布时间】:2014-05-29 08:39:30 【问题描述】:

我一直在寻找一段时间,但还没有找到我想要的东西。因此,我有一个用 Java 编写的项目,并创建了一个嵌入到项目中的小型 Derby 数据库。现在,在创建项目的可执行 jar 时,我无法再访问数据库,除非我将 derby 数据库文件放在可执行 jar 所在的同一目录中。但是,我不希望这样,我真的希望数据库文件在 jar 内。

我试图将数据库文件放在一个包中并像这样引用它,但没有任何运气。有人能指出我怎样才能让它工作吗?

谢谢!

编辑 这里的目标是我想创建多个可执行 JAR 文件并将它们上传到 Sun Grid Engine 并使用不同的参数执行每个 jar。但是,他们都需要能够访问数据库,直到现在,当 1 个应用程序已经启动 derby 数据库时,我得到一个错误,另一个应用程序无法访问它。因此所有 jar 文件都需要有自己的数据库。

【问题讨论】:

它是只读数据库,还是您打算在您的应用程序中更新它? 它是一个只读数据库 不能选择将其解压到某个临时目录并在关闭应用程序时将其删除? 你给我的链接(并且已经删除)说:“数据库应该在你运行 jar 的文件夹中。”这正是我不想要的。 - 我在原帖中添加了我的目标。 我没有链接那个 (***.com/questions/11864443/…) 但我确实看过它。关键可能在“检查文档如何指定连接 url”中。这是可能的。罐子只是一个拉链。连接 url 可以处理 jar 的内容。我依稀记得做了类似的事情来访问一些位图和资源而不提取它们。 【参考方案1】:

您是否使用 jdbc:derby:jar 协议来访问您的数据库?

根据documentation,您所追求的应该是可能的。

在您的应用程序(进入可执行 jar 的应用程序)中,您必须使用 jdbc:derby:jar 协议访问数据库。

创建具有所需内容的数据库。 构建 jar 后,可以使用 jar 命令将数据库目录添加到 jar 中。

显然,所有这些都可以放入您的构建脚本中......

可能存在与罐子密封等有关的问题,YMMV。

【讨论】:

以上是关于在可执行 jar 中访问 derby 数据库的主要内容,如果未能解决你的问题,请参考以下文章

Derby数据库的安装配置及使用

Java:如何在可运行的 Jar 文件中打包和访问资源?

使用 Maven 在可执行 JAR 中包含签名库

无法在可执行 jar 中运行的 java 项目中找到文件

找不到 Derby 数据库,如何在 Java 中连接

如何在可执行文件中包含带有 pyinstaller 的特定 .jar 文件?