MongoDB-Java 驱动程序:插入失败时捕获异常

2023-12-03

我正在做一个非常基本的插入,如下所示:

try
{
    DB mongoDb = _mongo.getDB(_databaseName);
    DBCollection collection = mongoDb.getCollection(_collectionName);
    collection.insert(myBasicDBObject);
}
catch (IOException ex)
{
    // Unreachable code
}
catch (MongoException ex)
{
    // Exception never thrown
}
catch (Exception ex)
{
    // Handle exception
}

假设出于某种原因 _databaseName 不正确,因此驱动程序无法连接到数据库。插入操作显然失败了,但有 3 件事:

  • 它永远不会抛出 MongoException
  • 我可以在“catch”块中捕获的唯一异常是通用“java 空指针异常”
  • mongoDb 和集合对象已创建且不为 null

然而,在我的 Eclipse 控制台中,我可以清楚地看到更详细的异常消息,例如:

java.io.IOException: couldn't connect to [/127.0.0.1:27017] bc:java.net.ConnectException: Connection refused: connect

有没有办法捕获这个异常?

Thanks

Edit

不幸的是,NullPointerException 不包含堆栈跟踪,只包含一个微薄的“java.lang.NullPointerException”。然而,这是我在抛出 NullPointerException 之前在控制台中看到的内容:

2011-08-05 10:06:52 com.mongodb.DBTCPConnector fetchMaxBsonObjectSize
ATTENTION: Exception determining maxBSON size using0
java.io.IOException: couldn't connect to [/127.0.0.1:27017]     bc:java.net.ConnectException: Connection refused: connect
at com.mongodb.DBPort._open(DBPort.java:206)
at com.mongodb.DBPort.go(DBPort.java:94)
at com.mongodb.DBPort.go(DBPort.java:75)
at com.mongodb.DBPort.findOne(DBPort.java:129)
at com.mongodb.DBPort.runCommand(DBPort.java:138)
at com.mongodb.DBTCPConnector.fetchMaxBsonObjectSize(DBTCPConnector.java:419)
at com.mongodb.Mongo.getMaxBsonObjectSize(Mongo.java:541)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:237)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:210)
at com.mongodb.DBCollection.insert(DBCollection.java:80)
at foo.App.main(App.java:25)

2011-08-05 10:06:53 com.mongodb.DBTCPConnector fetchMaxBsonObjectSize
ATTENTION: Exception determining maxBSON size using0
java.io.IOException: couldn't connect to [/127.0.0.1:27017]     bc:java.net.ConnectException: Connection refused: connect
at com.mongodb.DBPort._open(DBPort.java:206)
at com.mongodb.DBPort.go(DBPort.java:94)
at com.mongodb.DBPort.go(DBPort.java:75)
at com.mongodb.DBPort.findOne(DBPort.java:129)
at com.mongodb.DBPort.runCommand(DBPort.java:138)
at com.mongodb.DBTCPConnector.fetchMaxBsonObjectSize(DBTCPConnector.java:419)
at com.mongodb.DBTCPConnector.checkMaster(DBTCPConnector.java:406)
at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:144)
at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:137)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:255)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:210)
at com.mongodb.DBCollection.insert(DBCollection.java:80)
at foo.App.main(App.java:25)

2011-08-05 10:06:54 com.mongodb.DBPortPool gotError
ATTENTION: emptying DBPortPool to 127.0.0.1:27017 b/c of error
java.io.IOException: couldn't connect to [/127.0.0.1:27017]   bc:java.net.ConnectException: Connection refused: connect
at com.mongodb.DBPort._open(DBPort.java:206)
at com.mongodb.DBPort.go(DBPort.java:94)
at com.mongodb.DBPort.go(DBPort.java:75)
at com.mongodb.DBPort.say(DBPort.java:70)
at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:151)
at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:137)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:255)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:210)
at com.mongodb.DBCollection.insert(DBCollection.java:80)
at foo.App.main(App.java:25)

这就是我想要捕捉的,但不幸的是似乎没有办法做到这一点......


我能够重现该行为,事实上,当您尝试将对象插入无法访问的 MongoDB 实例时,您只能捕获 NullpointerException。恕我直言,这种行为应该在 MongoDB Java 驱动程序中修复,因为它不太像 Java 风格。肮脏的解决方法可能看起来像这样:

private static void safeInsert(DBCollection c, DBObject o) {
    if (c == null) {
        throw new RuntimeException("collection must not be null");
    }

    if (o == null) {
        throw new RuntimeException("object must not be null");
    }

    try {
        c.insert(o);
    } catch (NullPointerException e) {
        throw new RuntimeException("unable to connect to MongoDB " + c.getFullName(), e);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB-Java 驱动程序:插入失败时捕获异常 的相关文章

  • Google 地图查询返回的 JSON 包含像 \x26 这样的编码字符(如何解码?)

    在 Java 应用程序中 我获取 JSON 来自 Google 地图 其中包含以下字符 x26我想将其转换为其原始字符 据我所知 这是一个 UTF 8 表示法 但我不完全确定 在源 JSON 中 可能会出现各种编码字符 例如 x3c div
  • MP3:一种以毫秒为单位获取任何给定字节位置的位置的方法?

    我创建了一个 servlet 它返回从客户端请求的任何给定字节位置开始的流 来自 MP3 文件 这允许客户端在任何给定字节位置立即开始播放 而无需进行任何本地查找 现在 我有一个滑块可以直观地显示进度 我正在使用当前字节位置来更新滑块 但是
  • 将链接对象转换为流或集合

    我想迭代堆栈跟踪 堆栈跟踪由可抛出对象组成 其 getCause 返回下一个可抛出对象 最后一次调用 getCause 返回 null 示例 a gt b gt null 我尝试使用 Stream iterable 这会导致 NullPoi
  • 使用 Spring 时实例化对象,用于测试与生产

    使用 Spring 时 应该使用 Spring 配置 xml 来实例化生产对象 并在测试时直接实例化对象 这样的理解是否正确 Eg MyMain java package org world hello import org springf
  • MongoDB:仅获取过去 24 小时内创建的文档?

    我想限制我所做的查询仅查看过去 24 小时内创建的文档 构造此查询的最佳方式是什么 如何根据日期进行限制 Add createdAt字段 索引它 然后查询 db getCollection COLLECTION NAME find crea
  • MI设备中即使应用程序被杀死,如何运行后台服务

    您好 我正在使用 alaram 管理器运行后台服务 它工作正常 但对于某些 mi 设备 后台服务无法工作 我使用了服务 但它无法工作 如何在 mi 中运行我的后台服务 MI UI有自己的安全选项 所以你需要的不仅仅是上面提到的粘性服务 你需
  • Spring Stomp over Websocket:流式传输大文件

    我的SockJs客户端在网页中 发送帧大小为16K的消息 消息大小限制决定了我可以传输的文件的最大大小 以下是我在文档中找到的内容 Configure the maximum size for an incoming sub protoco
  • 场景生成器删除 fxml 文件中的导入

    我使用场景构建器 Gluon Scene Builder JavaFX Scene Builder 8 1 1 来创建应用程序的 UI 并使用 Eclipse 开发 JavaFX 现在 每次我在场景生成器中保存某些内容时 它都会从 fxml
  • 使用 Java 在浏览器中下载 CSV 文件

    我正在尝试在 Web 应用程序上添加一个按钮 单击该按钮会下载一个 CSV 文件 该文件很小 大小仅约 4KB 我已经制作了按钮并附加了一个侦听器 文件也准备好了 我现在唯一需要做的就是创建单击按钮时下载 csv 文件的实际事件 假设 fi
  • Java替换特定字符

    这是我在这个网站上的第一个问题 所以我会尽量不要成为一个十足的菜鸟 我目前正在用java 创建刽子手游戏 所以我问你的问题是我们是否被赋予了 幽灵 这个词 并将 Ghost 替换为 hiddenWord ghost length for i
  • 为什么我在 Mac 上看到“java.lang.reflect.InaccessibleObjectException: Unable to make private java.nio.DirectByteBuffer(long,int)accessibl

    我已经在工作中愉快地构建代码好几天了 但突然我的一个项目 不是全部 失败并出现此错误消息 看看下面的答案吧 我是如何修复它的 起初我用谷歌搜索 看到很多有这个问题的人正在使用 Java 16 但我认为 错误 我正在使用 Java 11 因为
  • @EnableTransactionManagement 的范围是什么?

    我试图了解正确的放置位置 EnableTransactionManagement多个 JavaConfig 上下文的情况下的注释 考虑以下场景 我在 JPAConfig java 和 AppConfig java 中有 JPA 配置以及一组
  • Install4j:如何在安装结束时执行命令行 java -jar filename.jar

    在 Intall4j 中 在安装结束时 我只想通过执行如下命令行来初始化某些内容 java jar filename jar 我怎样才能归档这个任务install4j Thanks 将 运行可执行文件或批处理文件 操作添加到 安装屏幕 并设
  • 如何在java中使jpeg无损?

    有没有人可以告诉我如何使用编写 jpeg 文件losslessjava中的压缩 我使用下面的代码读取字节来编辑字节 WritableRaster raster image getRaster DataBufferByte buffer Da
  • 从 Java 日历迁移到 Joda 日期时间

    以前 当我第一次设计股票应用相关软件时 我决定使用java util Date表示股票的日期 时间信息 后来我体会到了大部分方法java util Date已弃用 因此 很快 我重构了所有代码以利用java util Calendar 然而
  • 在 AKKA 中,对主管调用 shutdown 是否会停止其监督的所有参与者?

    假设我有一位主管连接了 2 位演员 当我的应用程序关闭时 我想优雅地关闭这些参与者 调用supervisor shutdown 是否会停止所有参与者 还是我仍然需要手动停止我的参与者 gracias 阻止主管 https github co
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • 使用 Java 从 S3 上的文件在 S3 上创建 zip 文件

    我在 S3 上有很多文件 需要对其进行压缩 然后通过 S3 提供压缩文件 目前 我将它们从流压缩到本地文件 然后再次上传该文件 这会占用大量磁盘空间 因为每个文件大约有 3 10MB 而且我必须压缩多达 100 000 个文件 所以一个 z
  • 重写Object类的finalize()方法有什么用?

    据我所知 在java中如果我们想手动调用垃圾收集器 我们可以执行System gc 1 我们在重写的finalize 方法中做了哪些操作 2 如果我们想手动调用JVM垃圾收集器 是否需要重写finalize 方法 我们在重写的 Finali
  • Java 推断泛型类型

    我正在寻找类似的推断捕获泛型类型的概念 类似于以下方法片段 但不是捕获泛型类型的类 public

随机推荐

  • 为什么 C++ 中 char 不被视为数字?

    我用 C 编写了一段代码 运行完美 我将其翻译为 C 那里给出了错误的输出 我有一个迭代 我将输入和迭代器变量都用作 char 以节省空间 但表现并不如预期 unsigned char repeat i cin gt gt repeat f
  • 处理日期/时间和时区的奇怪时间偏移

    我一直在尝试编写一些函数来根据谷歌电子表格上多个单元格的信息创建谷歌日历和谷歌日历事件 发布的第一期here日期部分已经得到解决 现在我在时间部分遇到问题 下面的代码 var ss SpreadsheetApp getActiveSprea
  • 有人可以向我解释一下这是什么类型吗? [复制]

    这个问题在这里已经有答案了 我发现了这种排序 有人可以向我解释一下它是什么类型吗 我认为这是选择排序对吗 嵌套循环如何工作 for i 0 i lt N i for j i 1 j lt N j if toSort i gt toSort
  • 数据总是在变化(SQL Server Management Studio)

    我正在使用 SQL Server Management studio 并不断收到相同的错误 摆脱它的唯一方法 通常 是重置 SQL Server 这非常烦人 有时在我的远程计算机上是不可能的 当我向表中添加一行 然后转到 编辑前 200 行
  • 在 PuTTY 中启动 SSH 连接,运行命令,并使会话保持活动状态

    我想每次通过 PuTTY SSH 到服务器时运行一些 shell 命令 我正在连接到由其他人管理的生产 Web 服务器 并且我不想在那里存储我自己的脚本 我看到了这个选项连接 gt SSH gt 远程命令 但是如果我将初始化命令放在那里 启
  • TypeScript:将键值类型反向映射到值键

    给定一个类型的对象 type Key2Value foo bar voo doo 假设该类型的值始终是字符串类型 如何构造实用程序类型ReverseMap
  • gprof 的替代品 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Locked 这个问题及其
  • Spring JMS 和 Oracle AQ

    有人让 Spring JMS 与 Oracle AQ 队列一起使用吗 我正在尝试根据这篇文章连接到 AQhttp blog nominet org uk tech 2007 10 04 spring jms with oracle aq 但
  • 使用 Angular JS 标签(例如 ng-view)从网络获取文本

    我正在尝试从网站获取所有可见文本 我使用 python scrapy 来完成这项工作 然而 我观察到 scrapy 仅适用于 HTML 标签 如 div body head 等 而不适用于 Ang view 等角度 js 标签 如果 ng
  • MongoDB 使用 Node.js 获取集合中的文档数量(计数)

    我目前正在编写一个函数 该函数应该返回集合中的文档数量 问题是当我返回值时它显示未定义 这是我的代码 var MongoClient require mongodb MongoClient open the connection the D
  • 您如何处理源代码管理中的配置文件?

    假设您有一个典型的 Web 应用程序和一个文件配置 无论如何 每个从事该项目的开发人员都会有一个适用于他们的开发盒的版本 其中会有开发版 产品版和阶段版 您如何在源代码控制中处理这个问题 根本不签入该文件 用不同的名称检查它还是干脆做一些奇
  • 将整数除以 2 时哪个选项更好?

    以下哪种技术是将整数除以 2 的最佳选择 为什么 技巧一 x x gt gt 1 技巧2 x x 2 Here x是一个整数 使用最能描述您要执行的操作的操作 如果将数字视为位序列 请使用位移位 如果将其视为数值 请使用除法 请注意 它们并
  • 我可以将多个 MySQL 行连接到一个字段中吗?

    Using MySQL 我可以做类似的事情 SELECT hobbies FROM peoples hobbies WHERE person id 5 我的输出 shopping fishing coding 但我只想要 1 行 1 列 预
  • Hadoop 和图像 3D 渲染

    我必须制作一个项目 3D 图像的分布式渲染 我可以使用标准算法 目的是学习hadoop而不是图像处理 那么有人可以建议我应该使用哪种语言 c 或 java 以及 3d 渲染器的一些标准实现吗 任何其他帮助都会非常有用 Hadoop 使用映射
  • 使用 WebpackExternals 进行酶单元测试

    我目前正在测试一个依赖于带有 webpack 外部脚本的组件 DBPanel js import React PureComponent from react import from jquery webpack 外部文件如下所示 webp
  • 如何检查 NSDictionary 或 NSMutableDictionary 是否包含键?

    我需要检查字典是否有密钥 如何 objectForKey如果键不存在则返回 nil
  • 在 R 中提取文件名的一部分

    我正在尝试编写一些代码来打开文件夹中的所有数据文件 应用一个函数 或一组函数 来提取我感兴趣的数据 到目前为止 一切都很好 问题是我想使用文件名的一个元素重新命名我从每个文件中提取的列之一 但我很难弄清楚如何提取它 我有一堆名为 YYYY
  • 如何在 RxJS observable 中添加额外的字段并等待它完成?

    我有一个返回的可观察值items 我只需要一个特定的项目 并且我想从也可观察到的 http 请求向其添加一些额外的字段 下面的代码是我试图实现这一目标的方法 但它不起作用 我需要完成所有可观察量才能获取完整的项目数据ngOnInit 我缺少
  • 如何在 pdf 中不显示页码 = 1 ? (html css)

    我的代码 html 像这样
  • MongoDB-Java 驱动程序:插入失败时捕获异常

    我正在做一个非常基本的插入 如下所示 try DB mongoDb mongo getDB databaseName DBCollection collection mongoDb getCollection collectionName