对应错误:
com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [bigint <-> java.util.Date]
// 主要用于将Cassandra中不支持的类型使用自定义的方法转换
// 此类错误均可使用类似方法解决
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();
}
}
}
Cassandra 中MappingCodec的用法示例
最新推荐文章于 2021-02-16 08:59:32 发布