2011-10-28 15 views
7

私はmongodbを使用してユーザーの情報を格納しています。 私は、dbから情報を取得し、Playerオブジェクトを作成し、それらをPlayerの配列に挿入するメソッドを作成したかったのです。 mongodbカーソル例外 - Java

この

は私がDBに保存されている4人のユーザーがいると、私は「ときに最初メソッドを呼び出した後、私は例外を取得していますたとえば、名前を印刷しようとmは、以下の方法

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

です。 メソッドの外側でtry-catchを使いましたが、例外をキャッチしましたが、最初のユーザーの名前しか表示されませんでした。これは、2番目の反復で例外をスローするようです。

私が受け取っていることを除いて、ここにメッセージがあります。

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) 

答えて

9

cursor.next()メソッドを呼び出すと、次の要素と増分カーソル位置が得られます。 cursor.next()を繰り返しごとに3回呼び出すので、2回目の繰り返しでは、カーソル内に「それ以上」の要素がありません。 要素を反復のローカル変数に保存します。

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

チャームのように働きました!ありがとう! –