我認爲,問題是,你正試圖存儲java.util.Date
對象在CQL bigint
。映射到bigint
在java驅動器的類型是long
(參見文檔的'CQL to Java type mapping'部分)。
假設你的意思是在毫秒爲單位存儲在此列中,您有幾種選擇。
- 改變列型到
timestamp
映射到java.util.Date
(和設置/通過setTiemstamp
/getTimstamp
訪問)。
- 使用
setLong
連同Date.getTime()
將Date
轉換爲表示紀元毫秒的long
。
- 創建並註冊一個custom codec映射
java.util.Date
到bigint
,即:
import com.datastax.driver.core.*;
import java.util.Date;
public class CodecTest {
static class DateToBigintCodec extends MappingCodec<Date, Long> {
DateToBigintCodec() {
// creates a mapping from bigint <-> Date.
super(TypeCodec.bigint(), Date.class);
}
@Override
protected Date deserialize(Long value) {
return new Date(value);
}
@Override
protected Long serialize(Date value) {
return value.getTime();
}
}
public static void main(String args[]) {
TypeCodec<Date> codec = new DateToBigintCodec();
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
try {
// register custom codec
cluster.getConfiguration().getCodecRegistry().register(codec);
Date date = new Date();
Session session = cluster.connect();
// insert Date value into column v, which is a bigint.
// schema:
// CREATE TABLE simple.tbl (k int PRIMARY KEY, v bigint)
PreparedStatement prepared = session.prepare("insert into simple.tbl (k, v) values (?, ?)");
BoundStatement bound = prepared.bind();
bound.setInt("k", 0);
bound.setTimestamp("v", date);
session.execute(bound);
// Retrieve column v as a Date.
Row row = session.execute("select v from simple.tbl").one();
System.out.println(row.getTimestamp("v"));
} finally {
cluster.close();
}
}
}
,所以你的意思是說長型可以在BIGINT列 –
是的,這裏是更多詳細信息HTTP插入://文檔.datastax.com/EN /開發/ Java的應用程序/ 3.1 /手動/ –