2015-03-03 42 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