2016-05-06 9 views
0

必要な.classファイルから参照されますが、MongoDBのJavaドライバの関数insertOne(ドキュメント)を使用しようとしたとき、私はこのエラーを取得しています:MongoDB Java Driver:タイプcom.mongodb.client.model.InsertOneOptionsを解決できません。これは、間接的に私は小さなプロジェクトのためにMongoDBを使用してい

The type com.mongodb.client.model.InsertOneOptions cannot be resolved. It is indirectly referenced from required .class files 

Javaドライバーをこのガイドと同様に設定しました。https://docs.mongodb.com/getting-started/java/client/

また、私は新しいプロジェクトを作成しようとしましたが、無駄にしました。

私が使用しているMongoDBのバージョンは3.2.6で、使用しているMongoDB Java Driverのバージョンは3.2.2です。私のJDKのバージョンは1.8.0_91です。私が使用しているIDEはEclipse Mars 2です(問題があるかどうかわかりません)。

ありがとうございます。

編集: http://pastebin.com/SGj0mXwh 問題は「addCompletedQuiz」機能の最後の行にある: これは私がJavaのドライバをテストするために作られた小さなコードです。

私がプロジェクトに追加した唯一のライブラリはBSON 3.0.4ライブラリとMongoDB Java Driver 3.2.2ライブラリなので、これは "JAR Hell"の問題ではないと思います。

また、すでにJavaドライバを再ダウンロードして読み込もうとしましたが、役に立たなくなりました。

+0

文書を挿入しようとしている場所にコードを添付できますか? また、プロジェクトのプロパティで、同じライブラリの複数のエディションが存在するかどうかをチェックします。それは "JAR Hell"関連の問題のように見えます。 – Lefteris008

+0

コードとライブラリを元の投稿に追加しました。 –

+0

mongo-java-driver-3.2.2.jarを追加すると問題が解決しました。ありがとうPiXel1225! –

答えて

1

あなたが提供したコードに基づいて、私はこのようなMongoClientインスタンス作成時に、サーバー名とポートを追加する必要があることを示唆:終了するメソッドを作成することを検討し、また

public Mongo() { 
    String serverName = ""; //Usually it's 'localhost' 
    String serverPort = ""; //Usually it's '8080' 
    try { 
     mongoClient = new MongoClient(serverName, serverPort); 
     db = mongoClient.getDatabase("IFHKServer"); 
    } catch (MongoClientException e) { 
     System.err.println("Error connecting to MongoDB Client."); 
     Logger.getLogger(Mongo.class.getName()).log(Level.SEVERE, null, e);  } 
} 

を新しい文書の挿入が完了したら、MongoDBインスタンスへの接続。

public final void closeMongoDBConnection() { 
    try { 
     mongoClient.close(); 
    } catch (Exception e) { 
     System.err.println("Error in terminating connection"); 
     Logger.getLogger(Mongo.class.getName()).log(Level.SEVERE, null, e); 
    } 
} 

私が見る限り、挿入コードは良好です。

一般的なヒント:

  • あなたは、挿入、更新またはMongoDBの中に文書を削除しようとしている場合は、常にのtry-catchブロックにあなたのコードを囲みます。
  • コードをクラス/パッケージにのみ使用することを制限しない限り、メソッド/クラスフィールドからpublic/private/protected識別子を省略しないでください。プロジェクトにMongoクラスのコードを使用する他のパッケージにクラスが含まれていると仮定すると、修飾子を持たないメソッドを宣言すると、このクラスが属するパッケージの外でそのメソッドを使用することができます。
  • コレクションの名前や文書内のフィールドなど、いつでも変更される可能性のあるものには、ハードコードされた名前を使用しないでください。これらの値をすべて外部の.propertiesファイルに転送し、Properties classを使用して読み取ることができます。このようにして、エンジニアプロジェクトを再構築することなく、コードを外部の変更に柔軟に対応させることができます。

EDIT

別にBSONライブラリから、次の3つが必要です:

  • MongoDBのドライバ-3.0.4.jar
  • MongoDBのドライバ-async-を3.0.4.jar
  • mongodb-driver-core-3.0.4.jar
+0

上記の答えは、MongoClientに関する私のエラーを解決しました。mongoClient = new MongoClient(uri); エラー:タイプcom.mongodb.ServerAddressを解決できません。これは、必要な.classファイルから間接的に参照されます – srinivas

関連する問題