这次遇到的问题小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数据库时间类型悬疑案的更多相关文章

  1. oracle 数据库时间类型为字符串 时间范围大小查询

    select * from invoicedetail t2 where t2.Memo is null and to_char(to_date(t2.PrintDate,'yyyy-MM-dd hh ...

  2. Oracle数据库date类型与Java中Date的联系与转化

    以下是对Java中的日期对象与Oracle中的日期之间的区别与联系做点说明,以期对大家有所帮助.new Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),就是系统当前 ...

  3. 数据库时间类型是 datetime 类型的处理

    当数据库时间类型是datetime类型时,获取前台时间是要这样处理 ,因为数据库是把时间转换为字符类型来比较的 sb.Append(" and Date <=convert(varch ...

  4. Oracle数据库字段类型说明

    目前Oracle 数据库大概有26个字段类型,大体分为六类,分别是字符串类型.数字数据类型.日期时间数据类型.大型对象(LOB)数据类型.RAW和LONG RAW数据类型.ROWID和UROWID数据 ...

  5. 关于EJB 时间注解与oracle数据库时间格式

    EJB中Temporal是时间注解,其中TemporalType是时间注解的枚举类型其中包括 TemporalType类型,请看源码/*** Type used to indicate a speci ...

  6. Oracle 数据库字段类型使用说明

    简介 目前Oracle 数据库大概有26个字段类型,大体分为六类,分别是字符串类型.数字数据类型.日期时间数据类型.大型对象(LOB)数据类型.RAW和LONG RAW数据类型.ROWID和UROWI ...

  7. oracle之时间类型

    Oracle 时间类型及Timezone 20.1 Oracle的六种时间类型 DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TI ...

  8. oracle数据库数值类型

    ---恢复内容开始--- 内容摘自网络 Oracle的数值类型有int,number,float,decimal,numberic等. NUMBER类型   定义   定义格式NUMBER (prec ...

  9. 修改oracle数据库时间

    1.修改前需要先停止 oracle 数据库服务 2.修改 oracle 数据库所在的服务器时间 3.再次启动 oracle 数据库,即可 以上就是小编修改 oracle 数据库的时间,修改完之后,其他 ...

随机推荐

  1. 高并发解决方案之Actor——第一节

    还在为状态的并发控制而痛苦吗?   还在因为数据库瓶颈而痛苦吗?   还在因为缓存的实时性控制而痛苦吗?   还在为了想分布式,但又不知道怎么下手而痛苦吗?   Actor欢迎你!!!   一.什么是 ...

  2. linux虚拟机安装演示

    做为一名linux初学者来说,在本机上安装linux虚拟机做为平时练习工具极为重要,此方式在充分体验linux操作乐趣的同时,又能保证不破坏已经配置好的服务器.所以虚拟机是一种很好的学习工具了.下面总 ...

  3. Spring Data JPA 实例查询

    一.相关接口方法     在继承JpaRepository接口后,自动拥有了按"实例"进行查询的诸多方法.这些方法主要在两个接口中定义,一是QueryByExampleExecut ...

  4. 【翻译】CSS水平和垂直居中的12种方法

    英语原文链接 在CSS中有许多不同的方法能够做到水平和垂直居中,但很难去选择合适的那个.我会向你展示我所看到的所有的方法,帮助你在所面对的情境下选择最棒的那一个. 方法1 此方法将只能垂直居中单行文本 ...

  5. 自适应滤波:维纳滤波器——GSC算法及语音增强

    作者:桂. 时间:2017-03-26  06:06:44 链接:http://www.cnblogs.com/xingshansi/p/6621185.html 声明:欢迎被转载,不过记得注明出处哦 ...

  6. Windows 10 Creaters Update 新功能——画中画模式和窗口高斯模糊

    在Windows 10 Creaters Update中,可以给窗口设置高斯模糊了,只要几行代码! <Grid Loaded="Grid_Loaded"> <Gr ...

  7. 【转】air调用windows自带的虚拟键盘

    原文:http://bbs.9ria.com/blog-73243-19560.html 最近在做一个东西,需要用到虚拟键盘.刚开始准备用as3开发一套,结果突然想起来windows有个自带的虚拟键盘 ...

  8. 微信小程序支付简单小结与梳理

    前言 公司最近在做微信小程序,被分配到做支付这一块,现在对这一块做一个简单的总结和梳理. 支付,对于购物来说,可以说是占据了十分重要的一块,毕竟能收到钱才是重点. 当然在开发之前,我们需要有下面这些东 ...

  9. js计算器

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  10. Mongodb Geo2d索引原理

    作者:孔德雨 MongoDB的geo索引是其一大特色,本文从原理层面讲述geo索引中的2d索引的实现. 2d 索引的创建与使用 通过 db.coll.createIndex({"lag&qu ...