【问题标题】:How to get cql date in java?如何在java中获取cql日期?
【发布时间】:2018-06-18 05:17:08
【问题描述】:

我在我的应用程序中使用 java8 和 cassandra。 cassandra 表中 current_date 的数据类型是“日期”。我在 java 中使用实体映射到表值。并且同一字段的实体中的数据类型是 java.sql.Date。

当我试图检索记录'Select * from table where current_date='2017-06-06';'时我收到以下错误'

`Caused by: com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: ['org.apache.cassandra.db.marshal.SimpleDateType' <-> java.sql.Date]

我尝试过各种数据类型,例如:

com.datastax.driver.core.LocalDate, java.util.Date ,com.google.common.reflect.TypeToken

所有都返回相同的错误。

我已推荐http://docs.datastax.com/en/developer/java-driver/3.1/manual/custom_codecs/extras/

但我被困住了。请帮帮我。

【问题讨论】:

标签: java cassandra datastax-java-driver


【解决方案1】:

默认情况下,Java 驱动程序会将date 类型映射为com.datastax.driver.core.LocalDate Java 类型。

如果您需要将date 转换为java.time.LocalDate,那么您需要在您的项目中添加额外内容,并按照文档中的说明全局注册编解码器:

cluster.getConfiguration().getCodecRegistry()
     .register(LocalDateCodec.instance);

或者您可以仅为给定列指定编解码器:

@Column(codec = LocalDateCodec.class)
java.time.LocalDate date;

同样的,也可以转换成 Joda 时间类型。

【讨论】:

  • 我可以给 @Column(codec = LocalDateCodec.class) 。那么 java 中 current_date 字段的数据类型应该是什么。应该是 com.datastax.driver.core.LocalDate 吗?
  • com.datastax.driver.core.LocalDate 不需要任何额外的编解码器 - 它应该默认工作。 LocalDateCodec 用于将date 转换为java.time.LocalDate(我会更新答案)
  • 我尝试使用 java.time.LocalDate 并得到异常:com.datastax.driver.core.exceptions.InvalidTypeException: Value current_date is of type custom, not date
  • 对我来说很好:gist.github.com/alexott/f9b91d81a21c97199e65c79451c26cd7 - 请检查您的表定义
猜你喜欢
  • 2015-05-30
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多