欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Cassandra 中MappingCodec的用法示例

程序员文章站 2024-03-19 22:23:04
...
对应错误:
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