2013-07-16 82 views
0

我有一張桌子和一個日期列,其中i保持時間戳值以下格式:如何在java中查詢數據庫中的日期間隔?

yyyy-MM-dd HH:mm:ss 

然後我想使返回我特定的時間間隔查詢。我給出了開始日期和結束日期。這裏是我做的:

PreparedStatement find = (PreparedStatement) con.prepareStatement("select * from transactions where transid=? and date >= ? and date <= ?"); 

    find.setString(1, selected.getIban()); 
    find.setDate(2, (Date) dt1); 
    find.setDate(3, (Date) dt2); 

    ResultSet res=find.executeQuery(); 

    while(res.next()){ 
     .... 
    } 

在調試我看到DT1和DT2與以下格式正確設置:

yyyy-MM-dd 

此ResultSet中有任何結果(不爲空,但空) while循環不執行。我不能使用> =和< =像我在查詢中那樣執行此操作嗎?或者是因爲我在db中存儲時間戳,但用日期查詢,並且這些格式不同。

謝謝

+0

首先對數據庫運行你的查詢,看它是否真的獲取了一些結果。 – NINCOMPOOP

+0

嘗試使用util.date中的sql.Date對象的即時版本 –

+0

'dt1'必須小於或等於'dt2',這是您的數據嗎? – sp00m

回答

0

我想通了,如何做到這一點。問題是由於Date和TIMESTAMP是不同種類的變量,所以比較它們會返回空白。要解決這個問題,我只是改變了小幅查詢:

PreparedStatement find = (PreparedStatement) con.prepareStatement("select * from transactions where transid=? and DATE(date) >= ? and DATE(date) <= ?");   
find.setString(1, selected.getIban()); 
find.setDate(2, dt1); 
find.setDate(3, dt2); 

現在工作

0

使用了PreparedStatement.setTimestamp();代替的setDate()

0

使用的setTimestamp

PreparedStatement find = (PreparedStatement) con.prepareStatement("select * from transactions where transid=? and date >= ? and date <= ?"); 

    find.setString(1, selected.getIban()); 
find.setTimestamp(2, new Timestamp(((Date) dt1).getTime())); 
find.setTimestamp(3, new Timestamp(((Date) dt2).getTime())); 

    ResultSet res=find.executeQuery(); 

    while(res.next()){ 
     .... 
    } 

或轉換日起蟄,並通過

PreparedStatement find = (PreparedStatement) con.prepareStatement("select * from    transactions where transid=? and date >= ? and date <= ?"); 

     find.setString(1, selected.getIban()); 
    find.setString(2, (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) dt2))); 
    find.setString(3, (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date) dt2))); 

     ResultSet res=find.executeQuery(); 

     while(res.next()){ 
      .... 
     } 
+0

謝謝,但simpledateformat返回一個字符串,我們正在嘗試setDate(2,字符串),這是不適用的,給出了語法錯誤 – yrazlik

+0

我們沒有設置日期我們正在通過日期作爲刺,看看 - >>>>> > find.setString(2,(new SimpleDateFormat(「yyyy-MM-dd HH:mm:ss」).format((Date)dt2))); (3),(new SimpleDateFormat(「yyyy-MM-dd HH:mm:ss」)。format((Date)dt2))); –

0

爲什麼不嘗試使用靜態時間戳像

select * from transactions  
where data > '2013-07-16 00:00:00' 
and data < '2013-07-20 00:00:00' 

,看看問題出在SQL或在程序中

相關問題