有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

mongodb游标异常Java

我正在使用mongodb存储用户信息。 我想创建一个方法,从数据库中获取信息,创建播放器对象并将它们插入播放器数组中

这是下面的方法

public ArrayList<Player> getArrayOfPlayers(){
    ArrayList<Player> savePlayers = new ArrayList<Player>();
    DB db = connectToMongo();
    DBCollection coll = db.getCollection("players");
    DBCursor cursor = coll.find();

        while(cursor.hasNext()) {
            String tempName = (String)cursor.next().get("name");
            String tempSession = (String)cursor.next().get("session");
            String tempStringScore = (String)cursor.next().get("score");

            int tempScore = Integer.parseInt(tempStringScore);

            Player player = new Player(tempName,tempSession,tempScore);
            savePlayers.add(player);
        }


    return savePlayers;
}

我在数据库中存储了4个用户,当我试图首先调用该方法,然后打印名称时,例如,我遇到了一个异常。 我在方法的while之外使用了一个try-catch,捕获了异常,但是它只打印了第一个用户的名称。似乎它在第二次迭代中抛出了异常

这是我收到的消息,但有一个例外

java.lang.RuntimeException: no more
com.mongodb.DBApiLayer$Result.next(DBApiLayer.java:394)
com.mongodb.DBApiLayer$Result.next(DBApiLayer.java:360)
com.mongodb.DBCursor._next(DBCursor.java:445)
com.mongodb.DBCursor.next(DBCursor.java:525)
machine.DAOMongodb.getArrayOfPlayers(DAOMongodb.java:74)
machine.testDB.doGet(testDB.java:43)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

共 (1) 个答案

  1. # 1 楼答案

    调用cursor.next()方法可以获得下一个元素并增加光标位置。 每次迭代调用cursor.next()3次,因此在第二次迭代中,游标中没有“no more”元素。 将元素保存在迭代的局部变量中:

    while(cursor.hasNext()) {
            DBObject tobj = cursor.next();  
            String tempName = (String)tobj.get("name");
            String tempSession = (String)tobj.get("session");
            String tempStringScore = (String)tobj.get("score");
    
            int tempScore = Integer.parseInt(tempStringScore);
    
            Player player = new Player(tempName,tempSession,tempScore);
            savePlayers.add(player);
        }