2015-03-03 43 views
0

我正在使用MongoDb。我有一個名爲'counter'的集合。我試圖檢索字段'seq'的值,該字段在MongoDb中以double形式存儲。Java:解析長引發錯誤

首先'seq'字段的值增加1,這很好。如果我最終將seq的值轉換爲字符串後,它的工作正常。它返回一個字符串值。

但是,當我嘗試使用Long.parseLong()或Long.valueOf()函數將字符串值(如1.0)解析爲Long時,它會引發錯誤。

重度:所述的RuntimeException不能被映射到一個響應, 再投擲到HTTP容器java.lang.NumberFormatException:對於 輸入字符串: 「47.0」

public long getNextSeq(){ 
     DBCollection coll = getCollection(getDb(DB_NAME), "counters"); 
     coll.update(new BasicDBObject().append("_id","blogId"), new BasicDBObject().append("$inc",new BasicDBObject("seq",1))); 
     DBObject seqObj = coll.findOne(); 
     String seqStr = seqObj.get("seq").toString(); 
     long seq = Long.valueOf(seqStr); 
     return seq; 
} 

所以我想知道爲什麼我無法將這個47.0長時間轉換,以及解決方案是什麼。

注意: seqObj.get("seq")會產生BSONObject。 (MongoDB的查詢)

+0

你試過'DBOBJECT seqObj = coll.findOne(); long seq = seqObj.getLong(「seq」);'? – chridam 2015-03-03 13:56:54

+0

@chridam我不認爲你可以使用long seq = seqObj.getLong(「seq」)。 getLong()不存在。 – StackPointer 2015-03-03 13:58:37

+0

請參閱[documentation](http://api.mongodb.org/java/2.8.0/org/bson/BasicBSONObject.html#getLong(java.lang.String))。你試過了嗎? – chridam 2015-03-03 14:00:53

回答

1

我通常做到以下幾點:

long l = ((Number) seqObj.get("seq")).longValue(); 
+0

想要長久的價值。不是雙倍。您可以稍後將其轉換爲較長時間。但爲什麼要執行這麼多的轉換,首先要串起來再加倍然後再變長。 – StackPointer 2015-03-03 14:00:36

+0

已更新爲已久。我不做任何字符串轉換 – Martin 2015-03-03 14:53:59