2015-05-04 84 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查詢,因爲是在評論中提到)