java - 引起:com.datastax.driver.core.exceptions.InvalidQueryException:日期(25)的预期长度为 8 或 0 字节
问题描述
我使用 Cassandra 和 SpringBoot 开发应用程序。我用 Java 编写了 Cassandra 查询;
String userName="testUser";
String lastUpdatedDate="2018-11-29 13:00:43.400";
String tenantName="demo";
Select select = QueryBuilder.select().all()
.from(tenantName,getGenericClass().getSimpleName())
.where(QueryBuilder.eq("user_Name", userName))
.and(QueryBuilder.gt("last_updateddate", lastUpdatedDate))
.allowFiltering()
.limit(100);
return (List<T>) cassandraOperations.select(select, getGenericClass());
last_updateddate 是 Cassandra 中的时间戳数据类型列。userName 和 last_updateddate 列是数据库中的复合键,使用最新版本的 Cassandra。
执行时出现以下错误。
引起:com.datastax.driver.core.exceptions.InvalidQueryException:日期(25)的预期长度为 8 或 0 字节
但
以下更改后问题得到解决。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = sdf.parse(lastUpdatedDate);
long timeInSec = date.getTime();
Timestamp ts=new Timestamp(timeInSec);
Date date1=ts;
Select select = QueryBuilder.select().all()
.from(tenantName,getGenericClass().getSimpleName())
.where(QueryBuilder.eq("user_Name", userName))
.and(QueryBuilder.gt("last_updateddate", date1))
.allowFiltering()
.limit(100);
return (List<T>) cassandraOperations.select(select, getGenericClass());
解决方案
您必须检查 Cassandra 表的数据类型并使用相应的 java 数据类型,并在声明变量以传递列的值时在 java 代码中使用它。
示例:在 Cassandra LocalDate 中,然后在 java 中定义 cassandra.core 包的 LocalDate 而不是 util 包的 Date 或 LocalDate。
推荐阅读
- r - ggplot 热图,其中轴缩放与其他变量成比例
- rest - 在 emacs lisp 中尝试使用 request.el 发布请求时获取请求默认错误回调?
- excel - 当区域选择过多时,使用 vba 和变量结束行和列创建表
- java - 在将一个对象复制到另一个对象时,如何避免使用这么多 if 语句?
- javascript - Highcharts - xAxis 每隔一年显示一次
- asp.net-core - ASP.NET Core Identity 中的 ChangeEmailAsync “无效令牌”
- python - 将数据框写入 MySQL 数据库
- android - 使用 CircleCI 构建 Gradle 测试失败
- r - 将 R 列表中的数值直接分配给 C++ 中的 NumericVector
- wordpress - 如何在 woocommerce 中以编程方式重新计算订单税和总额