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

私も同じ問題を抱えていました。

kK_Pulla が述べたように、Java Native Interface を介して C/C++ で記述されたネイティブ ライブラリを使用する sleepycat API。したがって、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 に答える
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 に答える