2013-03-10 58 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()也可能工作(但只有如果字节缓冲区没有直接分配)