由DBCursor的“can't switch cursor access methods”异常引发的思考
Posted herman很慢
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由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 类型。
1 void _checkType( CursorType type ){ 2 if ( _cursorType == null ){ 3 _cursorType = type; 4 return; 5 } 6 7 if ( type == _cursorType ) 8 return; 9 10 throw new IllegalArgumentException( "can‘t switch cursor access methods" ); 11 }
回过头来看, 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”异常引发的思考的主要内容,如果未能解决你的问题,请参考以下文章