Oracle数据库时间类型悬疑案
这次遇到的问题小Alan其实一年半前做证券行业项目就已经遇到过,但是一直没有去思考是什么原因导致的这样的悬疑案,悬疑案是什么呢?其实很简单,我想有不少童鞋都有用到Oracle数据库,情形是这样子的,这是我们做电商平台常见的订单表中包含的两个字段:
如图,随便拿两个时间举例,一个是买家提交订单的时间,一个是卖家确认订单的时间,我们来看一条数据,它是这样子的:
大家看数据,没毛病吧,两个日期格式是一模一样的,采用的都是TIMESTAMP(6)类型的时间格式,DATE也是比较常用的类型,如果需要更精确可以考虑使用TIMESTAMP类型,那么问题出在哪里呢?我们通过测试工具jmeter向后端发送一个订单详情接口的请求:
返回的数据如下:
当小Alan看到禅道上面测试mm提的Bug时心是绝望的,what?fuck?shit?这是什么鬼?果不其然,过了没多久做ios的哥们就找上门来了?为什么你提交订单的时间是年月日时分秒,而确认订单的时间又是毫秒数?我fuck your...但是经过小Alan的三寸会烂之舌,做ios的哥们很配合的自己格式化去了,真不是小Alan懒哦,而是做H5和Android的哥们已经自己格式化了,大家要统一开发风格嘛,O(∩_∩)O哈哈哈~
但是懒是阻止不了小Alan的求知欲望的,于是仔细的去看了看代码当中的玄妙之处,秒秒钟还是找到了问题所在,上面还在说大家要统一开发风格,结果自己还真没有统一开发风格,好尴尬,咳...咳...咳...
问题出在哪呢?接下来为大家揭晓:
我们先看看提交订单的sql语句(Sql语句太长,简单截取表示):
这里用到的是orm框架Mybatis,大家可以发现orderTime是通过实体类传过来的,再来看看给它赋值的代码部分:
这说明了什么?说明提交订单的时间是通过java.util.Date类型的无参构造函数得到的当前系统时间,有毛病吗?当然没毛病!我们再来看看确认订单的时间又是怎么来的呢?我们来到确认订单的接口:
小Alan找了半天硬是没找到在哪给的确认订单的时间,这就是问题所在了,提交订单是另一个做Java的哥们开发的接口,确认订单呢是我开发的接口?这不明摆着没有统一开发风格么,咳...咳...咳...好尴尬啊!小Alan就想这里没有给时间那数据库怎么会有确认订单的时间?于是继续往下走来到了sql语句:
原来确认订单的时间是这么子来的?直接用的oracle数据库服务器的当前系统时间sysdate,经过这么一出,于是数据的数据是这样子的:
这尼玛有毛病吗?就是没毛病!但是接口返回的数据的的却却有毛病!小Alan就给大家揭晓到这里,别问小Alan到底是不是这个原因导致的,小Alan比较懒没有验证过,闲着没事的可以去验证一下,如果不是这么回事记得在下面评论就好,别打小Alan,小Alan拿个碗到街上乞讨都没人打发点,就不要再伤害小Alan幼小的心灵了。
结束语:就是没毛病。
可爱博主:AlanLee
博客地址:http://www.cnblogs.com/AlanLee
本文出自博客园,欢迎大家加入博客园。
Oracle数据库时间类型悬疑案的更多相关文章
- oracle 数据库时间类型为字符串 时间范围大小查询
select * from invoicedetail t2 where t2.Memo is null and to_char(to_date(t2.PrintDate,'yyyy-MM-dd hh ...
- Oracle数据库date类型与Java中Date的联系与转化
以下是对Java中的日期对象与Oracle中的日期之间的区别与联系做点说明,以期对大家有所帮助.new Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),就是系统当前 ...
- 数据库时间类型是 datetime 类型的处理
当数据库时间类型是datetime类型时,获取前台时间是要这样处理 ,因为数据库是把时间转换为字符类型来比较的 sb.Append(" and Date <=convert(varch ...
- Oracle数据库字段类型说明
目前Oracle 数据库大概有26个字段类型,大体分为六类,分别是字符串类型.数字数据类型.日期时间数据类型.大型对象(LOB)数据类型.RAW和LONG RAW数据类型.ROWID和UROWID数据 ...
- 关于EJB 时间注解与oracle数据库时间格式
EJB中Temporal是时间注解,其中TemporalType是时间注解的枚举类型其中包括 TemporalType类型,请看源码/*** Type used to indicate a speci ...
- Oracle 数据库字段类型使用说明
简介 目前Oracle 数据库大概有26个字段类型,大体分为六类,分别是字符串类型.数字数据类型.日期时间数据类型.大型对象(LOB)数据类型.RAW和LONG RAW数据类型.ROWID和UROWI ...
- oracle之时间类型
Oracle 时间类型及Timezone 20.1 Oracle的六种时间类型 DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TI ...
- oracle数据库数值类型
---恢复内容开始--- 内容摘自网络 Oracle的数值类型有int,number,float,decimal,numberic等. NUMBER类型 定义 定义格式NUMBER (prec ...
- 修改oracle数据库时间
1.修改前需要先停止 oracle 数据库服务 2.修改 oracle 数据库所在的服务器时间 3.再次启动 oracle 数据库,即可 以上就是小编修改 oracle 数据库的时间,修改完之后,其他 ...
随机推荐
- eclipse一直报An internal error occurred during: "Building workspace". GC overhead limit exceeded
最近导入到eclipse里的工程挺大的,每次eclipse启动之后都回update workspace,然后就一直报: An internal error occurred during: " ...
- Android自学反思总结(中)
后来在导员的推荐加上自己的好奇心给电脑装上了Ubuntu,因为Android的内核就是Linux,导员想让我们及早接触,及早熟悉,这也是我后来一直冷落Windows的原因,装Ubuntu的过程是艰辛的 ...
- css3 loading
http://jsbin.com/vonuni/2/edit?html,css,output
- 深入理解ajax系列第九篇——jQuery中的ajax
前面的话 jQuery提供了一些日常开发中需要的快捷操作,例如load.ajax.get和post等,使用jQuery开发ajax将变得极其简单.这样开发人员就可以将程序开发集中在业务和用户体验上,而 ...
- javaEE与JSP基础
JSP基础 1. jsp的作用: * Servlet: > 缺点:不适合设置html响应体,需要大量的response.getWriter().print("<html ...
- 第4章Zabbix监控实践
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; t ...
- 老李推荐:第14章6节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-启动ViewServer
老李推荐:第14章6节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-启动ViewServer poptest是国内唯一一家培养 ...
- ecshop SQL注入漏洞导致代码执行
漏洞名称:ecshop SQL注入漏洞导致代码执行补丁编号:11208761补丁文件:/includes/libinsert.php补丁来源:云盾自研漏洞描述:ecshop的/includes/lib ...
- Gym 101257G 24 (概率+二分)
题意: 有一道分值为sa的题,n个人比赛写这道题,按照递减的顺序给出每个人的当前分数,和每个人写不出这道题的概率,让你输出有反超现象出现的期望 思路:由于之前把题目翻译错了导致很久没有相通,后来看了别 ...
- matlab函数:c2d离散化函数(待完善)
Convert model from continuous to discrete time sysd =c2d(sys,Ts)sysd =c2d(sys,Ts,method)sysd =c2d(sy ...