当前位置: 首页 > 面试题库 >

使用MongoDB驱动程序时出现java.lang.NoClassDefFoundError

巩镜
2023-03-14
问题内容

我正在尝试使用servlet上的Java驱动程序连接到mlab上托管的MongoDB数据库。

import org.bson.Document; 
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class MongoConnection {

    protected void connectToMongo(String loc){

        String dbName = "readings";
        String collection = "data";

        MongoClientURI uri = new MongoClientURI("mongodb://user:pass@ds143109.mlab.com:43109/readings");
        MongoClient client = new MongoClient(uri);
        MongoDatabase db = client.getDatabase(dbName);

        MongoCollection<Document> readings = db.getCollection(collection);

        Document doc = Document.parse(loc);

        readings.insertOne(doc);

        client.close();
    }
}

问题是我遇到以下错误: java.lang.NoClassDefFoundError: com/mongodb/MongoClientURI

我看了一个答案(如何解决ClassNotFoundException:com.mongodb.connection.BufferProvider?),该答案向我强调了我需要其他jar,自从我下载了这些jar之后,仍然出现此错误。

我正在使用Eclipse并将这三个jar添加到构建路径,通过右键单击项目,然后单击来浏览菜单
Build Path -> Configure buildpath -> Java build path -> libraries -> add external JARs

这是正确的方法吗?还有其他我应该做的事情吗?


问题答案:

您拥有java.lang.NoClassDefFoundError-这意味着您的类在运行时(而不是在构建/编译时)丢失。因此,您应该打开项目的“运行配置”对话框(项目上下文菜单->“运行方式”->“运行配置…”),并确保您拥有bson-
xxx.jar,mongodb-driver-xxx。jar和mongodb-driver-core-xxx.jar以某种方式在Classpath选项卡中列出。是的,就像Xavier Bouclet所说的-如果您在应用程序服务器下运行它,则应将这些jar添加到服务器的类路径中。



 类似资料:
  • 我试图使用servlet上的Java驱动程序连接到托管在mlab上的MongoDB数据库。 问题是我得到以下错误: 这样做对吗?我还应该做什么/代替吗?

  • 问题内容: 我们当前的连接配置如下所示: 并且已在当前版本(源代码)中弃用,并将被删除:“此方法无法替代。使用connectTimeout属性控制连接超时。” 我认为重试和连接超时是两回事。有谁知道为什么改变了它以及它有什么(内部)含义? 问题答案: 关于autoConnectRetry的含义有很多困惑。大多数人认为这意味着,如果操作由于IOException而失败,驱动程序将重试该操作,直到ma

  • 我正在处理以下堆栈的解决方案: ASP. NET Core .NET核心 MongoDB ...使用此驱动程序与数据库通信:https://www.nuget.org/packages/MongoDB.Driver.Core/ ...版本2.4.1 我试图像这样实例化MongoClient: 但最后一句话错误地说: “系统”类型的异常。MongoDB中出现MissingMethodExceptio

  • 通过使用MongoDB和Java驱动程序,我有一个用户集合,我想根据他们的ObjectId进行查询(总体情况:我从ObjectId推断出对象的创建时间戳)。 问题是,用ObjectId查询似乎不起作用:我总是没有结果。为了测试的目的,我在搜索查询中硬编码了数据库中现有用户的ObjectId,只是为了确保我能得到结果: {“_id”:ObjectId(“565ef85ee4b0a4db3c2fc96

  • 如何在mongo db中创建一个可以公开集合中所有文档的视图?我使用了以下代码: 我正在尝试用管道空列表,但它不工作。你能帮忙吗?

  • 我总是读到MongoDB驱动程序(>2.0)for NodeJS支持承诺。但我找到的仅有的例子是connect()和findOne()函数。虽然它适用于这些,而且我可以得到承诺,但对于aggregate()和find()它不适用。我明白这是因为它们可能会返回游标,但是既然有承诺支持,那些承诺在哪里呢?一定有办法和他们合作。欢迎提供链接、示例或简单解释:) 谢谢你,乔迪。