首页 > 数据库技术 > 详细

由DBCursor的“can't switch cursor access methods”异常引发的思考

时间:2018-09-30 15:37:31      阅读:136      评论:0      收藏:0      [点我收藏+]

先谈谈我是怎么用的:

 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”异常引发的思考

原文:https://www.cnblogs.com/hanhaotian/p/9729606.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!