由DBCursor的“can't switch cursor access methods”异常引发的思考
先谈谈我是怎么用的:
DBCollection dbcollection = XXXXXXXXXX(); //连接mongo
DBCursor dbCursor = mergeVideoDB.find(XXXX); //根据name查出若干个
if (dbCursor.length() == 1) {
return videoinfos;
}
while(dbcursor。hasNext()){ // 这一步产生错误,报出DBCursor的“can't switch cursor access methods”
XXXXXX;
}
以上!
首先在使用hasNext方法后需要先通过 _checkType() 检查 cursor 类型。
void _checkType( CursorType type ){
if ( _cursorType == null ){
_cursorType = type;
return;
}
if ( type == _cursorType )
return;
throw new IllegalArgumentException( "can't switch cursor access methods" );
}
回过头来看, DBCursor dbCursor = mergeVideoDB.find(XXXX); //根据name查出若干个
此时,DBCursor的type为 null
if (dbCursor.length() == 1) {
return videoinfos;
}
在执行完上述步骤后,DBCursor的type变为了array
所以在使用hasNext方法时会报出
"can't switch cursor access methods"
解决思路:
1.不要在之前使用会更改其type的方法进行操作;
2.使用除hasNext之外的其他遍历方法进行遍历
直接使用foreach方法进行遍历即可:
for (DBObject dbObject:dbCursor){}。
由DBCursor的“can't switch cursor access methods”异常引发的思考的更多相关文章
- 如何捕获access violation异常
文章目录 access violation的由来 access violation的实例 Win32 exception SEH异常与C++标准异常 捕获方法 1.access violation的由 ...
- MongoDB ,cursor not found异常
查询mongoDB集合数据更新,数据有400w多.我一次用cursor(游标)取1w,处理更新.程序在某段时间运行中遍历游标时发生异常! DBCursor cursor = tabColl.find( ...
- [改善Java代码]小心switch带来的空值异常
使用枚举定义常量时,会伴有大量的switch语句判断,目的是伪类每个枚举项解释其行为,例如: public class Client { public static void main(String[ ...
- 提高你的Java代码质量吧:小心switch带来的空值异常
一.分析 使用枚举定义常量时,会有伴有大量的switch语句判断,目的是为每个枚举解释其行为. 我们知道,目前的Java的switch语句只能判断byte.short.char.int类型(JDK7 ...
- js02--对象、函数、switch、for、异常、表单验证
现在我们接着来继续学习有关js的一些基础. 1.undefined与null undefined:当变量声明但尚未赋值时,它的类型就是undefined null:表示一个不存在的对象,它 ...
- uvm Register Access Methods(16)
转载: 译文:https://blog.csdn.net/zhajio/article/details/80731435 原文:http://cluelogic.com/2013/02/uvm-tut ...
- 集合并发修改异常-foreach的时候不可修改值
直接上代码: 无意间发现的://这个方法本身是为后面的集合去掉前面集合的重复数据一直报错,并发修改异常,仔细看mainList正在迭代循环,然后我进行了remove操作,这个时候就会报这个错.故:总结 ...
- 为什么iterator,foreach遍历时不能进行remove操作?除了一种情况可以这样(特殊情况)?
Exception in thread "main" java.util.ConcurrentModificationException 并发修改异常引发的思考! 1 foreac ...
- Heterogeneous Self-Organizing Network for Access and Backhaul
This application discloses methods for creating self-organizing networks implemented on heterogeneou ...
随机推荐
- The fastest MySQL Sandbox setup ever!
MySQL-Sandbox 3.1.10 introduces a new utility, different from anything I have put before in the MySQ ...
- UESTC 2016 Summer Training #1 J - Objects Panel (A) 按条件遍历树
#include <iostream> #include <cstdio> #include <vector> using namespace std; typed ...
- CSS基础学习 19.CSS hack
- Debian常见命令总结
dpkg学习: (1)dpkg是一个较底层的安装工具,处理.deb文件,软件包依赖性需要更高层的前端工具是apt: dpkg本身是不能解决依赖的. dpkg是dpkg-deb的前端,如果d ...
- JavaScript中的类(Class)
基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到的,新的class写法是让对象原型的写法更加清晰,更像面向对象编程的语法而已. ES5生成例对象传统方法是通过构造函 ...
- [].slice.call(arguments,1) 个人理解
var arr = []; [] == arr; 假设 var arr = [1,2,3,4,5]; 那么 arr.slice(1,2) == [2]; 通过 slice.call 才能使用call显 ...
- git命令行提交流程
一.顺利提交无冲突情况(diff->add->fetch->pull->commit->push) 1.git status 查看状态 2. git diff head ...
- GET与POST方法和用curl命令执行
1.超文本传输协议 超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信,web 浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端. HTTP的工作方式是客户机与服务器之间 ...
- 埋点(Event Tracking)vs 无埋点(Codeless Tracking) vs 可视化埋点(Visual Event Tracking)
在理解什么是埋点之前,首先需要了解一些基础知识:(以下摘自:http://www.chinawebanalytics.cn/auto-event-tracking-good-bad-ugly/) 我们 ...
- setTimeout设置为0 为啥不能立马执行
setTimeout(function(){}, timer) 是指延时执行.第一个参数是回调函数,第二个参数是指延时多久执行回调函数. setTimeout(function(){console.l ...