好问题
Good  Question
  • 首 页
  • 问题
    • PHP
    • JAVA
    • CPlusPlus
    • C#
    • SQL
  • 关 于
  • 联 系
java.util.Date和java.sql.Date对比 关闭 返回上一级  

java.util.Date和java.sql.Date对比
+ 查看更多

发布日期:2018-03-26 10:44
分类:JAVA
浏览次数:118
java.util.Date和java.sql.Date,什么时候该用哪个?为什么?

回答

你讲到了JDBC中我最喜欢的一部分:Date处理类。
通常上数据库至少支持三种时间字段,日期,时间和时间戳。他们中每一个在JDBC中都有相应的类,都继承自java.util.Date。关于它们的一些语义描述如下:
java.sql.Date:对应于SQL DATE,它存储年月日,同时小时,分钟,秒,毫秒被忽略。另外sql.date不绑定时区。
java.sql.Time:对应于SQL TIME,它仅包含小时,分钟,秒,毫秒的信息。
java.sql.Timestamp:对应SQL TIMESTAMP,这个精确到纳秒,并可以自定义精度。但是util.Date仅支持到毫秒。
与这三种类型相关的JDBC程序的常见错误就是类型匹配不正确。就是说把sql.Date当成时区相关或者是认为sql.Time包含当前年月日等信息。
最后,我们到底该用哪个?
这取决与字段的SQL类型,PreparedStatement已为三个值提供了设置器,setDate()设置sql.Date,setTime()设置sql.Time,setTimestamp()设置sql.Timestamp。如果你使用如下代码:
ps.setObject(fieldIndex, utilDateObject);
那么你可以给大多数JDBC驱动程序提供一个util.Date,程序会把它当作正确的类型接受它,但是如果你稍后请求数据的话,你会发现其实你缺少了数据,就是说前面额对象类型并不正确。
我认为所有的Date都不应该被使用
我所说的是把所有的毫秒或者纳秒保存为纯long,然后转换为你所需要的对象。一个黑客方法是把日期组件存储为一个long类型,把时间组件存储为另一个,比如现在是20100221和154536123。这些数字可以使用在数据库SQL查询中,从一个数据库到另一个数据库之间很方便,并且可以让你完全抛开这部分JDBC/java Date API。
附:强制性的Joda-Time插件:
http://www.joda.org/joda-time/
上一篇用Java怎么把字节转大小化成我们易读形式?
在Java中,我怎样检查一个字符串是否包含一个子串(忽略大小写)?下一篇
下一篇在Java中,我怎样检查一个字符串是否包含一个子串(忽略大小写)?

最新文章

  • 函数`__construct`用来干嘛的
    发布日期:2018-03-26
  • 通过访客的IP得到他们的地区
    发布日期:2018-03-26
  • 合并两个PHP对象的最好的方法是什么?
    发布日期:2018-03-26
  • 该如何把一该如何把一个对象转化成数组?
    发布日期:2018-03-26
  • 什么是输出缓冲区?
    发布日期:2018-03-26
  • 在PHP中怎么把用逗号分隔的字符串分隔在一个数组里?
    发布日期:2018-03-26
  • 在PHP中使用foreach循环时查找数组的最后一个元素
    发布日期:2018-03-26
关于好问
收集整理一些有用的问题和回答,造福中国的程序旺和IT喵们!
友情链接
起飞页 
相关信息
版权声明
Copyright © 2016 - 2022  苏州卡达网络科技有限公司 备案号:苏ICP备09008221号