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

这个结果集中没有结果(不是空的,而是空的)并且 while 循环不执行。我不能像在查询中那样使用 >= 和 <= 来执行此操作吗?还是因为我将时间戳存储在数据库中,但使用日期查询,而这些格式不同。

谢谢

4

4 回答 4

0

使用preparedStatement.setTimestamp(); 而不是 setDate()

于 2013-07-16T06:57:53.487 回答
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()){
            ....
        }
于 2013-07-16T07:13:53.000 回答
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 回答