2015-09-27 147 views
0

在這裏, 我想要做的是, 如果給定的userid已經存在,那麼它應該清除所有的字段。 並重新啓動該頁面....爲什麼它進入無限循環

private void uuserActionPerformed(java.awt.event.ActionEvent evt) { 
    MongoClient mClient; 
    DB mDB; 
    DBCollection valCollection; 
    Cursor cursor; 

    try { 
     mClient = new MongoClient(ip, port); 

     System.out.println("Connected to mongodb instance at " + ip + ":" + port); 
     mDB = mClient.getDB(dbName); 
     valCollection = mDB.getCollection(collectionName); 

     userid = uuser.getText(); 

     BasicDBObject findPara = new BasicDBObject(); 
     BasicDBObject findCon = new BasicDBObject(); 

     findPara.append("userid", userid); 
     findCon.append("userid", true); 
     findCon.append("_id", false); 

     cursor = valCollection.find(findPara, findCon); 

     flag = 1; 
     while (cursor.hasNext()) { 
      flag = 0; 
      System.out.println("User ID is not correct!!!"); 
     } 

     if (flag == 0) { 
      System.out.println("User Id is not correct..."); 

      dispose(); 
      new Register().setVisible(true); 
     } 

     System.out.println("Move Forward Your Id is correct..."); 

    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
     System.exit(-1); 
    } 
} 
+0

「用戶ID已經存在」會更有意義,如果打印光標包含的任何值 – redFIVE

回答

2

很肯定你必須做這樣的事情:

flag=1; 
while (cursor.hasNext()) 
{ 
    cursor.next(); 
    flag=0; 
    System.out.println("User ID is not correct!!!"); 
} 

因爲你的光標從來沒有移動到下一個元素。 另外我看不出使用while循環爲你的目的的好處。 在這種情況下,如果您只想知道是否不存在具有該ID或某些項的條目,則甚至不需要提前光標 。

flag=1; 
if(cursor.hasNext()) 
{ 
    flag=0; 
    System.out.println("User ID is not correct!!!"); 
} 
2

該代碼永遠不會前進到下一個記錄。

環路應包含

cursor.next() 

消耗的結果。

+1

不知道爲什麼你不使用簡單地計算,它會提高你的編碼標準 –

+0

@RohitJain事實上 - 以及與組合第一或限制,因爲總數不是必需的。這只是努力解決字面問題。 – user2864740

+0

是的,這也是正確的做法 –