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

概述

在设计库表时,经常会碰到用于保存"时间值"的字段,如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

时间: 2024-08-19 19:44:23

浅析J2EE应用中的时间值字段的数据类的相关文章

java中List按照指定字段排序工具类

文章标题:java中List按照指定字段排序工具类. 文章地址: http://blog.csdn.net/5iasp/article/details/17717179   包括如下几个类   1. 实体类   package com.newyear.wish; /** * 实体类 * */ public class Video { public Video(int id, String title, int hits) { super(); this.id = id; this.title =

java-如何在j2EE项目中采用Data Service 来管理数据 :支持数据的统一管理

问题描述 如何在j2EE项目中采用Data Service 来管理数据 :支持数据的统一管理 java项目中如何使用Dada Service 来管理项目: 要达到的目的:1,可以从多个数据源中加载数据,提供提供访问数据的统一接口 2,可以支持丰富的查询方式 ,实现内部的转换通过sqlParser 来对支持多种sql就如同 Apache 的calcite 项目中貌似可以找到蛛丝马迹,但是有好多的技术不是很了解 如:linq4jsparksplunkcsv ...等,有没有关于dataservice

关于数据库中日期时间型字段的操作问题

问题描述 我数据库用的是sQL2005,字段类型没有时期型,只有日期时间型,在操作时,这就产生了一个问题,我是以这个日期字段为主关键字的,可我在添加时,要先判断主键的唯一性,form表单用添加日期用的是控制dateTimePicker,这样如何与数据库中的字段比较,请指教.库中字段格式为2014-9-300:00:00 解决方案 解决方案二:至少可以dataTimePicker.Value.ToString("yyyy-MM-ddHH:mm:ss").Equals(sqlDataRea

浅析C++11中的右值引用、转移语义和完美转发_C 语言

1. 左值与右值:     C++对于左值和右值没有标准定义,但是有一个被广泛认同的说法:可以取地址的,有名字的,非临时的就是左值;不能取地址的,没有名字的,临时的就是右值.     可见立即数,函数返回的值等都是右值;而非匿名对象(包括变量),函数返回的引用,const对象等都是左值.     从本质上理解,创建和销毁由编译器幕后控制的,程序员只能确保在本行代码有效的,就是右值(包括立即数);而用户创建的,通过作用域规则可知其生存期的,就是左值(包括函数返回的局部变量的引用以及const对象)

Strust2关于jsp页面中的属性值怎么封装成类传入action中?

问题描述 我用的是在Struts2中在jsp页通过struts2特殊标签讲对应的属性值封装成类传入action中,可是总是报空指针异常:目前所包含的条件有:1.实体类:其中包括了实体对象的各种set和get方法:2.实体映射文件:<hibernate-mapping><classname="com.rzq.bean.Userinfo"table="userinfo"catalog="rzq_3aweb"><idnam

浅析Linux中的时间编程和实现原理(三) Linux内核的工作

引子 时间系统的工作需要软硬件以及操作系统的互相协作,在上一部分,我们已经看到大多数时间函数都依赖内核系统调用,GlibC 仅仅做了一次请求的转发.因此必须深入内核代码以便了解更多的细节. 内核自身的正常运行也依赖于时钟系统.Linux 是一个典型的分时系统,CPU 时间被分成多个时间片,这是多任务实现的基础.Linux 内核依赖 tick,即时钟中断来进行分时. 为了满足应用和内核自己的需求,内核时间系统必须提供以下三个基本功能: 提供系统 tick 中断(驱动调度器,实现分时) 维护系统时间

在Access 2007表中添加和删除字段

在创建Access2007表之后,有时需要修改表的设计,在表中增加或删除字段.在Access2007中,可以在"设计"视图和"数据表"中添加或删除字段. 一.在"设计"视图中添加或删除字段 在"设计"视图中添加或删除字段的操作步骤如下: (1)在"教学管理"数据库中,打开"学生"表并切换到设计视图.添加一个"出生日期"字段,选中"系别"字段行. (

delphi-Delphi:cxGrid关联的DataSet中如果有Lookup字段时,反应非常慢,请高手指教!

问题描述 Delphi:cxGrid关联的DataSet中如果有Lookup字段时,反应非常慢,请高手指教! cxGrid关联的DataSet中如果有Lookup字段,数据记录大约在5百行左右,打开速度就特别慢. 比如: 在数据库中, 销售出库单中只有客户编号,即FCltCode,没有客户名称: 客户档案表中有客户编号FCode,客户名称FName, 在DataSet1中建立FCltName字段,为Lookup类型,通过FCltCode与FCode关联,显示FCltName. 在这种情况下,软件

对象-数据库时间类型字段在jsp页面中显示

问题描述 数据库时间类型字段在jsp页面中显示 我通过js向后台发送请求,查询数据库中的字段.其中有一个字段是date时间类型的, 查询结果在jsp页面中显示的不是时间而是Object. 解决方案 在JSP页面中显示动态时间jsp页面显示动态时间如何在JSP页面中显示当前时间 解决方案二: 前台现实的是object格式的吗? 你可以Tostring()啊 解决方案三: 格式化日期的值,或者直接Tostring 解决方案四: 吧他转为字符串在进行输出 解决方案五: 建议数据库里吧date类型转化成