MongoDB Java 驱动程序:无法解析类型 com.mongodb.client.model.InsertOneOptions。它是从所需的 .class 文件中间接引用的
MongoDB Java Driver: The type com.mongodb.client.model.InsertOneOptions cannot be resolved. It is indirectly referenced from required .class files
我正在为一个小项目使用 MongoDB,但在尝试使用 MongoDB Java 驱动程序中的函数 insertOne(Document) 时出现此错误:
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,我用的MongoDBJava驱动版本是3.2.2。我的 JDK 版本是 1.8.0_91。 IDE 我使用的是 Eclipse Mars 2(我不知道这是否重要)。
提前致谢。
编辑:
这是我为测试 Java 驱动程序而编写的一小段代码:
http://pastebin.com/SGj0mXwh
问题出在 "addCompletedQuiz" 函数的最后一行。
我添加到项目中的唯一库是 BSON 3.0.4 库和 MongoDB Java Driver 3.2.2 库,所以我认为这不是 "JAR Hell"问题。
此外,我已经尝试重新下载并读取 Java 驱动程序,但无济于事。
根据您提供的代码,我建议您在创建 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 块中。
- 不要在您的 methods/class 字段中省略 public/private/protected 标识符,除非您想将您的代码仅用于您的 class/package。假设您的项目在使用
Mongo
class 中的代码的其他包中包含 classes,声明一个没有修饰符的方法允许在包外使用它 class 属于.
- 避免对随时可能更改的内容使用硬编码名称,例如集合名称或文档中的字段。您可以将所有这些值传输到外部 .properties 文件并使用 Properties class 读取它们。这样,您的代码在外部更改时将更加灵活,而无需重建实体项目。
编辑
除了BSON库,你还应该有以下三个:
- mongodb-driver-3.0.4.jar
- mongodb-driver-async-3.0.4.jar
- mongodb-driver-core-3.0.4.jar
我正在为一个小项目使用 MongoDB,但在尝试使用 MongoDB Java 驱动程序中的函数 insertOne(Document) 时出现此错误:
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,我用的MongoDBJava驱动版本是3.2.2。我的 JDK 版本是 1.8.0_91。 IDE 我使用的是 Eclipse Mars 2(我不知道这是否重要)。
提前致谢。
编辑: 这是我为测试 Java 驱动程序而编写的一小段代码: http://pastebin.com/SGj0mXwh 问题出在 "addCompletedQuiz" 函数的最后一行。
我添加到项目中的唯一库是 BSON 3.0.4 库和 MongoDB Java Driver 3.2.2 库,所以我认为这不是 "JAR Hell"问题。
此外,我已经尝试重新下载并读取 Java 驱动程序,但无济于事。
根据您提供的代码,我建议您在创建 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 块中。
- 不要在您的 methods/class 字段中省略 public/private/protected 标识符,除非您想将您的代码仅用于您的 class/package。假设您的项目在使用
Mongo
class 中的代码的其他包中包含 classes,声明一个没有修饰符的方法允许在包外使用它 class 属于. - 避免对随时可能更改的内容使用硬编码名称,例如集合名称或文档中的字段。您可以将所有这些值传输到外部 .properties 文件并使用 Properties class 读取它们。这样,您的代码在外部更改时将更加灵活,而无需重建实体项目。
编辑
除了BSON库,你还应该有以下三个:
- mongodb-driver-3.0.4.jar
- mongodb-driver-async-3.0.4.jar
- mongodb-driver-core-3.0.4.jar