2013-03-10 41 views
3

我試圖插入一個longtype列到卡桑德拉:插入LongType卡桑德拉使用節儉失敗

 Column docid = new Column();   
    docid.setName("docid".getBytes());  
    ByteBuffer val = ByteBuffer.allocate(8); 
    val.putLong(123111111111111111L); 
    docid.setValue(val); 
    docid.setTimestamp(System.currentTimeMillis()); 
    client.insert(term, parent, docid, ConsistencyLevel.ONE); 

它運行正常,但是當我試圖讓通過CLI值,則返回

[[email protected]] get Term[utf8('hello')]['docid'] as long; 
=> (column=docid, value=, timestamp=1362891987234) 

看起來值沒有被正確插入。爲什麼?

我試圖插入ASCII類型和它的作品。

回答

0

變化:

docid.setValue(val); 

要:

docid.setValue(val.array()); 
0

也許你已經找到了解決辦法,或者你切換到定製列表,但它可以幫助:

把你的長期價值爲後字節緩衝區,你忘了翻轉()它。 正如在Javadoc解釋的,翻轉所述緩衝器裝置設置限制於當前位置,然後將當前位置設置到零

如果不翻轉,所包含的值讀取當前位置(其中插入字節之後是)開始,這就是爲什麼當你查詢它的「價值」是空的。

這裏是固定的代碼:

val.putLong(123111111111111111L); 
val.flip(); // Flip the buffer 
docid.setValue(val); 

編輯:

val.array()返回ByteBuffer的內部數組,所以不是翻轉緩衝器,設置列的值,以val.array()也可能工作(但只有如果字節緩衝區沒有直接分配)