[英]How to query a date interval in a database in 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
此結果集中沒有結果(不是null,而是空),並且while循環不執行。 我不能像查詢中那樣使用> =和<=來做到這一點嗎? 還是因為我將時間戳存儲在db中,但查詢了日期,而這些具有不同的格式。
謝謝
使用prepareStatement.setTimestamp(); 代替setDate()
使用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()){
....
}
或將日期轉換為st並通過
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()){
....
}
我想出了怎么做。 問題在於,由於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);
現在可行
為什么不嘗試使用靜態時間戳,例如
select * from transactions
where data > '2013-07-16 00:00:00'
and data < '2013-07-20 00:00:00'
並查看問題是否出在sql或程序中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.