0

次の形式でタイムスタンプ値を保持するテーブルと日付列があります。

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に保存しますが、日付でクエリを実行し、これらが異なる形式になるためです。

ありがとうございました

4

4 に答える 4

0

prepareStatement.setTimestamp ();を使用します。setDate() の代わりに

于 2013-07-16T06:57:53.487 に答える
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);

これで動作します

于 2013-07-16T07:52:53.560 に答える
0

のような静的タイムスタンプを使用してみませんか

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

問題がSQLまたはプログラムにあるかどうかを確認します

于 2013-07-16T07:53:10.997 に答える