for 循环而不是 while 循环中的游标功能?
Cursor functionality in a for loop as opposed to a while loop?
我正在使用 DBCursor
打印 MongoDB 数据库中的文档。当我使用 while 循环时,它工作正常。
DBCursor cursor = people.find(new BasicDBObject("isPerson",true));
while(cursor.hasNext()){
System.out.println(cursor.next());
}
cursor.close();
使用 while 循环,打印文档。当我使用 for 循环时,出现错误。
cursor = people.find(new BasicDBObject("isPerson",true));
for(int a=0;a<cursor.length()-1;a++){
System.out.println(cursor.next());
}
cursor.close();
这是错误:
java.lang.IllegalArgumentException: Can't switch cursor access methods
at com.mongodb.DBCursor.checkIteratorOrArray(DBCursor.java:841)
at com.mongodb.DBCursor.next(DBCursor.java:168)
at mongotest.MongoTest.main(MongoTest.java:39)
但即使我使用以下代码绕过错误,也不会打印任何内容。
cursor = people.find(new BasicDBObject("isPerson",true));
int b = cursor.length()-1;
cursor = people.find(new BasicDBObject("isPerson",true));
for(int a=0;a<b;a++){
System.out.println(cursor.next());
}
cursor.close();
看看里面的 next() 方法 DBCursor class
@Override
public DBObject next() {
checkIteratorOrArray(IteratorOrArray.ITERATOR);
if (!hasNext()) {
throw new NoSuchElementException();
}
return nextInternal();
}
它清楚地提到了 if !hasNext() 抛出异常
另外
如果您将 cursor.length() 保持在 for 循环中并通过调用 cursor.next() 继续迭代,游标长度会不断变化并引发异常。
看看你的替代方法,你已经用游标长度初始化变量 i 并且 i 的值在执行 FOR 循环期间不会改变。
我正在使用 DBCursor
打印 MongoDB 数据库中的文档。当我使用 while 循环时,它工作正常。
DBCursor cursor = people.find(new BasicDBObject("isPerson",true));
while(cursor.hasNext()){
System.out.println(cursor.next());
}
cursor.close();
使用 while 循环,打印文档。当我使用 for 循环时,出现错误。
cursor = people.find(new BasicDBObject("isPerson",true));
for(int a=0;a<cursor.length()-1;a++){
System.out.println(cursor.next());
}
cursor.close();
这是错误:
java.lang.IllegalArgumentException: Can't switch cursor access methods
at com.mongodb.DBCursor.checkIteratorOrArray(DBCursor.java:841)
at com.mongodb.DBCursor.next(DBCursor.java:168)
at mongotest.MongoTest.main(MongoTest.java:39)
但即使我使用以下代码绕过错误,也不会打印任何内容。
cursor = people.find(new BasicDBObject("isPerson",true));
int b = cursor.length()-1;
cursor = people.find(new BasicDBObject("isPerson",true));
for(int a=0;a<b;a++){
System.out.println(cursor.next());
}
cursor.close();
看看里面的 next() 方法 DBCursor class
@Override
public DBObject next() {
checkIteratorOrArray(IteratorOrArray.ITERATOR);
if (!hasNext()) {
throw new NoSuchElementException();
}
return nextInternal();
}
它清楚地提到了 if !hasNext() 抛出异常
另外
如果您将 cursor.length() 保持在 for 循环中并通过调用 cursor.next() 继续迭代,游标长度会不断变化并引发异常。
看看你的替代方法,你已经用游标长度初始化变量 i 并且 i 的值在执行 FOR 循环期间不会改变。