Java 使用thrift将LongType插入Cassandra失败
我试图在cassandra中插入一个长型列:Java 使用thrift将LongType插入Cassandra失败,java,nosql,cassandra,thrift,Java,Nosql,Cassandra,Thrift,我试图在cassandra中插入一个长型列: Column docid = new Column(); docid.setName("docid".getBytes()); ByteBuffer val = ByteBuffer.allocate(8); val.putLong(123111111111111111L); docid.setValue(val); docid.setTimestamp(Syst
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获取值时,它返回
[default@Test] get Term[utf8('hello')]['docid'] as long;
=> (column=docid, value=, timestamp=1362891987234)
似乎没有正确插入值。为什么?
我尝试了插入ascii类型,它可以工作。更改:
docid.setValue(val);
致:
也许您已经找到了解决方案,或者您切换到了CQL,但这会有所帮助: 将长值放入ByteBuffer后,您忘记了翻转()。 正如javadoc中所解释的,翻转缓冲区意味着将限制设置为当前位置,然后将当前位置设置为零 如果不翻转它,所包含的值将从当前位置(即插入的字节之后)开始读取,这就是查询时“值”为空的原因 以下是固定代码:
val.putLong(123111111111111111L);
val.flip(); // Flip the buffer
docid.setValue(val);
编辑:
val.array()
val.putLong(123111111111111111L);
val.flip(); // Flip the buffer
docid.setValue(val);