1

我正在尝试从 java 代码访问 Berkeley DB 数据库文件(比如 Test.db),然后想从中读取所有对。我正在使用com.sleepycat.db.*andcom.sleepycat.bdb.*包(注意:不是 Oracle Berkeley DB JE)来完成这项任务。对于实现,我完全按照BerkeleyDB Java API 教程中的描述进行了操作

所以,当我从 Eclipse 运行这个项目时,我得到了这个错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: no db_java-4.2 in java.library.path

并且从堆栈跟踪中,此异常的来源发生在这一行

env = new DbEnv(0);

我试图从java命令设置它

$java -D<name>=<value>

但它仍然没有用。

我的目标是将这个项目导出到一个 jar 文件中,并用它来读取任何地方的 BDB。任何知道如何摆脱这种情况的人,我感谢您的帮助。如果我也可以重定向到任何工作教程以从 Java 代码访问 Berkeley DB,那就太好了。谢谢 !!

4

2 回答 2

0

解决方案:经过大量工作后,我发现我正在开发的 Sleepycat API 使用的是通过 JNI 用 C/C++ 编写的本机库。安装在我的 PC 上的 Berkeley DB 没有共享对象文件 db_java-4.2(准确地说,文件名为 libdb_java-4.2),这意味着该 BDB 未针对 java API 进行配置。

因此,解决方案是通过启用 java 配置再次从头开始安装 BDB。

于 2012-08-17T22:26:12.070 回答
0

我有同样的问题。

就像 kk_Pulla 提到的, sleepycat API 使用通过 Java Native Interface 用 C/C++ 编写的本地库。因此,进行 Sleepycat API 调用意味着 java 代码最终将调用已编译的 C/C++ 代码。

如果您收到“java.lang.UnsatisfiedLinkError: no db_java-4.2 in java.library.path”错误,那么至少在我的情况下,您可能没有在项目中包含相关的本地库。

我会描述我为解决这个问题所做的工作。首先让我描述一下我的环境。

  1. Linux 机器上的 IntelliJ maven Java 项目。
  2. 构建 Berkeley DB 版本 18.1.40。
  3. Berkeley 构建在配置阶段包含了 --enable-java 开关。
  4. 我通过 Intellij 菜单文件 > 项目结构将 db.jar(在 build_unix 目录中找到)作为模块依赖项包含在内。我在左侧窗格的项目设置下选择了模块,然后在依赖项选项卡下我添加了 db.jar 文件作为依赖项。

这是我遇到 UnsatisfiedLinkError 之前项目的状态。为了解决这个问题,我将本机库(位于 unix_build/.libs 目录中)添加到项目中。你可以通过选择文件菜单>然后项目结构来做到这一点。在项目设置下的左窗格中选择库,然后单击右窗格上的 + 号以添加本机库的目录。

这解决了我的问题。

于 2021-02-09T21:55:18.680 回答