浅析J2EE应用中的时间值字段的数据类 - 编程入门网
浅析J2EE应用中的时间值字段的数据类时间:2011-05-20概述 在设计库表时,经常会碰到用于保存"时间值"的字段,如create_date,begin_time,login_time等,举不胜举。针对这些类型的字段,在设置数据类型时,有一个有趣的现象,即其中一些人使用Date类型,而另外一些人使用Char(8)/Char(14)类型。一般而言,初学者,在校学生,甚至老师一般都属于前者,他们一个鲜明的特征是对数据库的理论掌握很好,但普遍缺少实际项目的开发经验;而后者一般是那些有一定项目经验的开发人员。乍一看,这些时间值字段,用Date类型应该是合情合理,天经地义的,为什么有一定项目经验的人偏偏要这样"弃暗投明",这样"特立独行"呢? 这是典型的白猫黑猫问题,理论化的东西很光鲜,但有时在实践中就是不灵光,而一些"旁门左道"的东西却显得更加方便易用。本文将通过一个具体例子的不同开发过程,分析Char类型时间字段为什么在实践中更受欢迎。考虑到篇幅所限,我们仅对Date类型和Char(8)类型的时间值字段作比较分析,对于Date类型和Char(14)类型的分析,相信大家完全可以由此而及彼。 1、比较的例子 我们设计了一个具体的实例,对用Char类型和Date类型的日期进行比较分析,使用的是Oracle数据库,现对该实例进行简单的描述。 假设有一个T_USER表,有一个EXPIRE_DATE(过期日期)字段,要求记录年、月、日的日期数据,对EXPIRE_DATE字段分别采用两种实现方式: 图 1 T_USER表 左边的T_USER(1)使用CHAR(8)保存日期值,以yyyymmdd格式保存,如20070606,20070501;而右边的T_USER(2)使用Date数据类型,我们称左边的数据表设计为CHAR类型日期方案,而右边的设计为DATE类型日期方案。 表中的数据当然不会生而有之,我们假设从Web的表单上提交上来,保存到表中,当然还要有查询、统计等操作,我们就通过这些常见的数据操作分析这两个方案的不同,通过这样的分析,孰劣孰优,相信我们就可以进行很好的判断了。 2、从表单添加记录的比较 Struts+Spring+Hibernate是目前Web项目中流行的框架,在这个框架中,Hibernate需要为T_USER生成一个User.java的PO,CHAR类型日期方案的User.expireDate为String类型,而DATE类型日期方案的User.expireDate为java.sql.Date类型,如图 2所示: 图 2 两方案分别对应的User.java PO 浅析J2EE应用中的时间值字段的数据类(2)时间:2011-05-20而对应Struts的展现层,需要提供一个UserActionForm,以获取页面表单的提交数据。不管采用哪种日期方案,UserActionForm.expireDate属性类型均为String,因为这样一来,可以直接从Struts的<html:text property="expireDate"/>获取数据,另外也方便数据回显到页面中;如果UserActionForm.expireDate采用java.sql.Date类型,则<html:text property="expireDate"/>标签的数据将无法正确地填充UserActionForm.expireDate对象属性中。 图 3 UserActionForm.java 表单提交上来的expireDate是带时间格式的字符串,如2006-06-06,2001-10-12,UserActionForm.expireDate简单地接受该值,在UserAction中,必须用UserActionForm的数据生成持久层所需的PO,即User对象。两种日期方案在数据的转换逻辑的区别分别描述如下: CHAR类型日期 由于User.expireDate也是String类型,因此,仅需要将UserActionForm.expireDate属性完全拷贝到User中,然后再将User.expireDate属性的日期格式符"-"去除却可,却将2006-06-06转换为20060606,对应操作逻辑的主要代码如下: 1. User user = new User(); 2. //将userActionForm中的数据拷贝到user对象中 3. BeanUtils.copyProperties(use |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |