Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CQL驱动程序在查询时间戳时出现无效查询异常_Java_Cassandra_Cql - Fatal编程技术网

Java CQL驱动程序在查询时间戳时出现无效查询异常

Java CQL驱动程序在查询时间戳时出现无效查询异常,java,cassandra,cql,Java,Cassandra,Cql,我试图使用基于时间跨度的查询来查询Cassandra,当从Java服务运行查询时,我遇到了InvalidQueryException 假设我有以下模式: CREATE TABLE user ( user_id uuid, ts timestamp, data text, PRIMARY KEY (user_id, ts) ) 使用cqlsh我可以进行如下查询: SELECT * FROM user WHERE user_id = c37d661d-7e61-49ea-96a5-

我试图使用基于时间跨度的查询来查询Cassandra,当从Java服务运行查询时,我遇到了InvalidQueryException

假设我有以下模式:

CREATE TABLE user (
  user_id uuid,
  ts timestamp,
  data text,
  PRIMARY KEY (user_id, ts)
)
使用
cqlsh
我可以进行如下查询:

SELECT * FROM user WHERE user_id = c37d661d-7e61-49ea-96a5-68c34e83db3a AND Time >= '2016-09-26T16:39:15+0000';
在我的Java服务中,以下代码抛出一个
InvalidQueryException

    Statement select = QueryBuilder.select().all()
                    .from(keyspace, tableName)
                    .where(eq("user_id", userUUID))
                    .and(gte("ts", startTime));

    session.execute(select);
引发的错误是:

SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.datastax.driver.core.exceptions.InvalidQueryException: Expected 8 or 0 byte long for date (24)] with root cause
com.datastax.driver.core.exceptions.InvalidQueryException: Expected 8 or 0 byte long for date (24)
如果我尝试以
字符串
而不是
语句
的形式执行查询,则效果很好。这里有一个例子

String query = "SELECT * FROM user WHERE user_id = c37d661d-7e61-49ea-96a5-68c34e83db3a AND ts >= '2016-09-26T16:39:15+0000';";
有几个问题:

  • 为什么我会收到一个异常,说“日期的长度应该是8或0字节”?表示可以将时间戳作为
    整数
    字符串
    输入
  • 使用
    语句
    类,我需要做什么才能使查询正常工作?我的服务接收ISO 8601日期格式的时间戳

  • 通过在执行之前将其转换为字符串,我可以使其正常工作

     Results = cassandraSession.execute(cqlStatement.toString());
    
    唯一能让它和时间戳一起工作的方法

    如果您只需要使用where子句中的日期,这将起作用


    我能够在执行之前将其转换为字符串,从而使其正常工作

     Results = cassandraSession.execute(cqlStatement.toString());
    
    唯一能让它和时间戳一起工作的方法

    如果您只需要使用where子句中的日期,这将起作用


    您好,您找到如何解决此问题了吗?我最近遇到了同样的问题,非常令人沮丧。相同的查询在cqlsh中运行,但不会从程序中运行。如果我复制查询表单调试日志并粘贴到cqlsh中,它运行良好…您好,您找到如何修复此问题了吗?我最近遇到了同样的问题,非常令人沮丧。相同的查询在cqlsh中运行,但不会从程序中运行。如果我复制查询表单调试日志并粘贴到cqlsh中,它运行良好。。。