一个使用JDBC按Date查询查询的问题

wy123456789
04-07-17 1 1495

在表中有如下数据
...| created_date |................
2004-7-16 15:05:22
2004-7-16 15:06:19
2004-7-16 15:08:20
.........
这些数据都是用JDBC 的setDate()插入的

执行如下SQL
String strQuery =
"SELECT * FROM t_wf_process_instance WHERE created_date > ? ";

ps = con.prepareStatement(strQuery);
java.util.Date a=new java.util.Date(2001,1,1,1,1,1);

ps.setDate(1 , new java.sql.Date(a.getTime()));

result = ps.executeQuery();
没有记录,
如果将sql改为
"SELECT * FROM t_wf_process_instance WHERE created_date < ? "
可以查出上述记录,

这是为什么,
我用"SELECT * FROM t_wf_process_instance WHERE created_date between ? AND ?"
可以么,好像也有上述问题,

有什么好的按时间范围查询的方法么
(以上测试使用Oracle8)





SoftBug
2004-07-17 23:58

因为java.sql.Date只能精确到某一天,所以使用setDate()方法插入的数据应该不会含有时分秒的信息的.应该使用java.sql.Timestamp和对应的setTimestamp()方法.

关于你说的查询的问题,问题在于创建的Date对象并不是所希望的2001-01-01 01:01:01,而是3901-02-01 01:01:01.
世纪的年份是"给定的年" + 1900,而月份是从0开始的.

对于年份的计算,推荐使用java.util.Calendar