快速业务通道

浅析J2EE应用中的时间值字段的数据类 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
r, userActionForm);

4. //将日期格式符去除,得到数据库存储日期格式,如将2006-06-06转换为20060606

5. user.setExpireDate(user.getExpireDate().replace("-",""));

6. …

7. //调用服务对象,将user保存到T_USER中

8. userService.save(user);

浅析J2EE应用中的时间值字段的数据类(3)

时间:2011-05-20

·DATE类型日期

在DATE类型日期方案中,由于PO User.expireDate属性为java.sql.Date,和UserActionForm.expireDate 存在类型的不匹配,因此需要通过一个转换函数,将String日期转换为java.sql.Date的日期。其主要代码如下:

1. User user = new User();

2. //由于expireDate不能直接进行拷贝,因此需要逐一拷贝属性

3. BeanUtils.copyPropertie(user, userActionForm,"userId");

4. BeanUtils.copyPropertie(user, userActionForm,"userName");

5. //使用转换函数str2Date()将String类型的时间转换为java.sql.Date的时间

6. java.sql.Date expireDate = str2Date(userActionForm.getExpireDate());

7. //设置expireDate属性

8. user.setExpireDate(expireDate);

9. …

10. //调用服务对象,将user保存到T_USER中

11. userService.save(user);

通过上面的比较,可以看出,使用DATE时间方案比使用CHAR时间方案在添加数据的处理上要复杂一些,表现在:

1) 由于属性名相同而类型存在不可直接转换的问题将导致无法进行对象间属性批量拷贝,即BeanUtils. copyProperties()批量属性拷贝函数会抛出异常,因此只能手工逐一进行单个具体属性的拷贝,如果属性个数很多,这一机械式的属性拷贝代码块就要相应增大,不但使代码显示臃肿难看,而且直接降低了代码的可维护性,因为一但因表字段名改变,就需要手工调整这段代码。

2) 需要提供一个将String日期串转换为java.sql.Date的转换函数,将年、月、日时间域分别从字串中抽取出来,并转换为int类型,然后利用java.sql.Date(int year,int month,int date)构造函数得到对应的java.sql.Date对象。

3、在数据查询上的比较

假设需要以EXPIRE_DATE字段为条件查询T_USER的记录,由于已经在T_USER.EXPIRE_DATE字段上建立了索引,在查询时需要考虑使用该索引。Web的查询界面如下:

浅析J2EE应用中的时间值字段的数据类 - 编程入门网

图 4 查询界面

日期条件值可以是yyyy、yyyy-mm、yyyy-mm-dd的格式,假如开始日期为2001,结束日期为2002,则表示日期区间为2001-01-01到2002-12-31,如果开始日期为2001,结束日期为2002-02,则表示日期区别为2001-01-01到2002-02-28,以此类推。此外,如果开始日期条件未提供,表示查询所有小于等于结束日期的记录,反之如果结束日期条件未提供,表示查询所有大于等于开始日期的记录。

浅析J2EE应用中的时间值字段的数据类(4)

时间:2011-05-20

·CHAR类型日期

CHAR类型日期数据表保存的是CHAR(8)类型的日期,此时可以用简单的方法构造出查询语义丰富,语句结构统一的查询SQL语句,构造方法如下:

1) 去除格式符:将开始,结束查询日期值中的时间格式符去除。

2) 补尾串:将开始日期字符串末尾用0补齐到8位长度,将结束日期字符串末尾用9补齐到8位长度。特别的,如果开始日期为空,则用00000000代替,而结束日期未提供则用99999999代替。

3) 构造查询SQL:用以下SQL语句构造查询语句:

select * from T_USER where EXPIRE_DATE between <开始日期> and <结束日期>

表 1 CHAR类型日期查询SQL结构

举个例子:假如开始,结束日期值分别为2001、2002-02,则按以上三步的处理过程分别为:

1)去除格式符:2001,200202

2)补尾串:20010000,20020299

3)构造查询SQL:

select * from T_USER where EXPIR

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号