2015-05-04 45 views
0

我有一个带有一个时间戳列的表。当我尝试使用此时间戳列执行日期过滤器时,它不会给出任何结果。表结构和代码段如下。Datastax java驱动程序日期过滤问题

创建表status_well
( WID INT, data_time时间戳,
主键(WID,data_time) )

SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); 
PreparedStatement statement = session.prepare("select from status_well where data_time>? and data_time<?"); 
BoundStatement boundStatement=new BoundStatement(statement);  
statement.setDate("data_time", DATE_FORMAT.parse("2015-05-01")); 
statement.setDate("data_time", DATE_FORMAT.parse("2015-05-10")); 

数据是有上述指定日期范围内,但没有数据返回。我尝试使用字符串而不是DATE_FORMAT.parse(“2015-05-01”),但是这给出了无效的类型错误。

请在此告诉我。

+1

你指定了分区键吗?即你在查询什么wid? – phact

回答

1

有对data_time列两个占位符,所以你需要使用基于索引的制定者,或指定的占位符:

PreparedStatement statement = session.prepare("select * from status_well " 
    + "where wid = :wid " 
    + "and data_time > :min and data_time < :max"); 
BoundStatement boundStatement = new BoundStatement(statement) 
    .setInt("wid", 1) 
    .setDate("min", DATE_FORMAT.parse("2015-05-01")) 
    .setDate("max", DATE_FORMAT.parse("2015-05-10")); 

(还增加了一个限制上wid获得有效CQL查询,因为是在评论中提到)