2011-10-28 15 views
7

मैं उपयोगकर्ताओं की जानकारी संग्रहीत करने के लिए mongodb का उपयोग कर रहा हूं। मैं एक ऐसी विधि बनाना चाहता था जो डीबी से जानकारी प्राप्त करे, प्लेयर ऑब्जेक्ट्स बनाता है और उन्हें खिलाड़ियों की एक सरणी में डाल देता है।mongodb कर्सर अपवाद - जावा

इस

मैं 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; 
} 

है। मैंने विधि के दौरान एक कोशिश-पकड़ का उपयोग किया और मैंने अपवाद पकड़ा, लेकिन फिर उसने केवल पहले उपयोगकर्ता के नाम को मुद्रित किया। ऐसा लगता है कि यह दूसरे पुनरावृत्ति में अपवाद फेंकता है।

यहां अपवाद के साथ संदेश है जो मुझे प्राप्त हो रहा है।

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 बार कॉल करते हैं ताकि दूसरे पुनरावृत्ति पर आपके पास कर्सर में "और नहीं" तत्व हो। तत्व को एक परिवर्तनीय स्थानीय में पुनरावृत्ति में सहेजें:

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

एक आकर्षण की तरह काम किया !!! धन्यवाद! –

संबंधित मुद्दे