2016-05-06 3 views
0

я использую MongoDB для небольшого проекта, но я получаю эту ошибку при попытке использовать функцию insertOne (Document) в драйвере MongoDB Java:MongoDB Драйвер Java: тип com.mongodb.client.model.InsertOneOptions не может быть разрешен. Это косвенно ссылается из требуемых .class файлов

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, а версия драйвера Java для MongoDB, используемая мной, - 3.2.2. Моя версия JDK - 1.8.0_91. IDE, которую я использую, - Eclipse Mars 2 (я не знаю, если это имеет значение).

Заранее спасибо.

Edit: Это небольшой кусок кода, который я сделал для тестирования драйвера Java: http://pastebin.com/SGj0mXwh Проблема находится в последней строке функции «addCompletedQuiz».

Единственными библиотеками, которые я добавил в проект, являются библиотека 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, всегда окружают код в примерочных улове блоков.
  • Не опускайте открытый/закрытый/защищенный идентификатор из полей методов/классов, если вы не хотите ограничивать использование своего кода только вашим классом/пакетом. Предполагая, что ваш проект включает классы в другие пакеты, в которых используется код в классе Mongo, объявление метода без модификатора позволяет использовать его за пределами пакета, к которому принадлежит этот класс.
  • Избегайте использования жестко заданных имен для вещей, которые могут быть изменены в любое время, например название вашей коллекции или поле в документе. Вы можете перенести все эти значения во внешний файл .properties и прочитать их, используя Properties class. Таким образом, ваш код будет более гибким во внешних изменениях, не перестраивая ваш проект.

EDIT

Помимо библиотеки BSON, вы должны иметь следующие три:

  • 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