gpt4 book ai didi

java - mongodb游标异常 - Java

转载 作者:IT老高 更新时间:2023-10-28 13:21:26 25 4
gpt4 key购买 nike

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

这是下面的方法

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)

最佳答案

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

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);
}

关于java - mongodb游标异常 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7930748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com