生日提醒功能-SQL查询语句在Java中怎么运用?

我想做一个带生日提醒功能的java程序。

数据库中的表birthday是:
ID mingzi shengri
1 张三 1988-2-1
2 李四 1989-1-3
3 王五 1987-5-20

现要写查询语句,以提醒我们15天内将要生日的人,且按时间先后顺序排序。

我自己写的查询语句构思如下:
获取系统当前时间。
计算15天后的时间(同时考虑到闰年和非闰年的区别)
从数据库中提取生日与15天后的时间比较,如果比后者小,则输出到table中

但是这样涉及到的问题是,系统的当前时间是2010-6-23,而数据库里的时间是198X年的,不管怎样,都 比当前时间小的,所以,怎么去排除年份的影响,就不大明白。

也尝试过用这样的语句:
String sql="SELECT * RROM birthday WHERE "+datadiff(getdate(),shengri)+"<=3 AND "+datediff(getdate(),shengri)+">=0";
ResultSet=excuteQuery(sql);

但是编辑会显示没有datadiff()和getdate()这样的对象。我import 了java.sql.*和java.sql.Date.*都没用~~

请大家帮我看看什么解决办法。
由于本人本身就没多少财富值,所以悬赏也就少了。但还是希望得到大家的帮助,谢谢了!
忘记提到的一点,
这表是用ACCESS做的

你再研究一下datadiff方法使用情况

DateDiff DateDiff: SQL server函数 返回 Variant (Long) 的值,表示两个指定日期间的时间间隔数目。

语法:
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

DateDiff 函数语法中有下列命名参数:
部分 描述
interval 必要。字符串表达式,表示用来计算date1 和 date2 的时间差的时间间隔
Date1□date2 必要;Variant (Date)。计算中要用到的两个日期。
Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。
firstweekofyear 可选。指定一年的第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。

主意此处:

interval 参数的设定值如下:
设置 描述
yyyy 年
q 季
m 月
y 一年的日数
d 日
w 一周的日数
ww 周
h 时
n 分钟
s 秒

主意此处:

firstdayofweek 参数的设定值如下:
常数 值 描述
vbUseSystem 0 使用 NLS API 设置。
vbSunday 1 星期日(缺省值)
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六
常数 值 描述
vbUseSystem 0 用 NLS API 设置。
vbFirstJan1 1 从包含 1 月 1 日的星期开始(缺省值)。
vbFirstFourDays 2 从第一个其大半个星期在新的一年的一周开始。
vbFirstFullWeek 3 从第一个无跨年度的星期开始。

那事情简单了啊

主意这里:
Access中:DateDiff(‘d‘,Time1,Time2)

查询本月记录: select * from house where datediff('m',dateandtime,now())=0 其中dateandtime是数据中日期字段

Sql中:DateDiff(d,Time1,Time2)

查询本月记录:SELECT * FROM 表 WHERE datediff(month,[dateadd],getdate())=0
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-23
直接用数据库的相关函数就行了啊
如果是oracle,
可以通过sysdate获取当前系统时间,然后通过to_char()获得此时间的年份
同理,可以获得数据库中你存储的时间的月份+当月的第几天
然后将上面的串进行拼接,就是今年的生日了啊

由此,这个动作完全可以在数据库中完成。

datadiff()在java里面不叫对象,而是方法。。这个方法没见过,可能是你在某个地方看到的一段代码吧,也许是别人写的。
建议你看看
Java的API文档,中文,英文的都有
第2个回答  2010-06-23
获取系统当前时间。
计算15天后的时间(同时考虑到闰年和非闰年的区别)
从数据库中提取生日与15天后的时间比较,如果比后者小,则输出到table中

但是这样涉及到的问题是,系统的当前时间是2010-6-23,而数据库里的时间是198X年的,不管怎样,都 比当前时间小的,所以,怎么去排除年份的影响,就不大明白。

也尝试过用这样的语句:
String sql="SELECT * RROM birthday WHERE "+datadiff(getdate(),shengri)+"<=3 AND "+datediff(getdate(),shengri)+">=0";
ResultSet=excuteQuery(sql);

但是编辑会显示没有datadiff()和getdate()这样的对象。我import 了java.sql.*和java.sql.Date.*都没用~~

这些你想得都不错但是还是有不足的地方,我建议你找本数据库的书看看上面有很多这样相似的例子我这里不能把代码一一打出来
第3个回答  2010-06-26
select mingzi,天数 from (
select *,datediff('d',DateSerial(year(now()),month(shengri),day(shengri)),now()) 天数
from birthday ) a
where 天数<=15
order by 天数本回答被提问者采纳
相似回答