java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类)。
java.sql.Date是java.util.Date的子类,是一个包装了毫秒值的瘦包装器,允许 JDBC 将毫秒值标识为 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数。 为了与 SQL DATE 的定义一致,由 java.sql.Date 实例包装的毫秒值必须通过将时间、分钟、秒和毫秒设置为与该实例相关的特定时区中的零来“规范化”。
说白了,java.sql.Date就是与数据库Date相对应的一个类型,而java.util.Date是纯java的Date。
从类 java.util.Date 继承的方法  
after, before, clone, compareTo, equals, getDate, getDay, getMonth, getTime, getTimezoneOffset, getYear, hashCode, parse, setDate, setMonth, setYear, toGMTString, toLocaleString, UTC 
sql.Date也有时间的
如果不想用oracle的to_date函数,可以自己生成sql.Date对象
String s = "2012-06-21 00:10:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date d1 = sdf.parse(s); //先把字符串转为util.Date对象
java.sql.Date d2 = new java.sql.Date(d1.getTime()); //再转换为sql.Date对象
想要将带时分秒的时间插入到数据库中,除了Oracle数据库的to_date()方法之外。我们可以用 Timestamp类来实现。java.sql.Date是规范化之后的时间,其时分秒部分被截取掉了。
java.sql.Date是为了配合SQL DATE而设置的数据类型。“规范化”的java.sql.Date只包含年月日信息,时分秒毫秒都会清零。格式类似:YYYY-MM-DD。当我们调用ResultSet的getDate()方法来获得返回值时,java程序会参照"规范"的java.sql.Date来格式化数据库中的数值。因此,如果数据库中存在的非规范化部分的信息将会被劫取。
 在sun提供的ResultSet.java中这样对getDate进行注释的:
       Retrieves the of the designated column in the current row of this <code>ResultSet</code> object as a “java.sql.Date” object in the Java programming language.
         同理。如果我们把一个java.sql.Date值通过PrepareStatement的setDate方法存入数据库时,java程序会对传入的java.sql.Date规范化,非规范化的部分将会被劫取。然而,我们java.sql.Date一般由java.util.Date转换过来,如:java.sql.Date sqlDate=new java.sql.Date(new java.util.Date().getTime()).
显然,这样转换过来的java.sql.Date往往不是一个规范的java.sql.Date.要保存java.util.Date的精确值,
我们需要利用java.sql.Timestamp.
eg:
 
[java] view plaincopy
<span style="font-size:18px;">  String s="2012-01-02 03:12:21";  
        SimpleDateFormat sp = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
        java.util.Date du = sp.parse(s);  
            java.sql.Timestamp st = new java.sql.Timestamp(du.getTime());</span>  
把一个日期值写入数据库中,发现由java.util.Date转存为java.sql.Date后,只有年月日,没有了时分秒: 
java.util.Date ud = new java.util.Date();   
java.sql.Date sd = new java.sql.Date(ud.getTime()); 
  这个可是不行的,用户至少要精确到分。由于java.sql.Date为了能够遵守sql日期标准,把所有时分秒都归了零。只有用Timestamp来进行保存,由于Timestamp是子类,因此写好的bean里面不需要修改数据类型。 
pstmt.setTimestamp(15, new java.sql.Timestamp(Calendar.getInstance().getTime().getTime()));  //当前时间  
pstmt.setTimestamp(16, new java.sql.Timestamp(userFile.getCreateTime().getTime()));  //指定时间   
对于指定时间还可以用Calendar类的setTime()方法来设置
[java] view plaincopy
<span style="font-size:18px;">Calendar cal = Calendar.getInstance();  
            System.out.println(cal.getTime().getTime());  
        String string="2012-01-01 01:02:03";  
    SimpleDateFormat sp = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
        java.util.Date da = sp.parse(string);  
        cal.setTime(da);  
            System.out.println(cal.getTime().getTime());</span>  
 在数据库中插入带时分秒的时间需要用Timestamp。一般做这种操作用框架居多,我就说一下Hibernate吧。在数据库表中字段类型设置为Date数据类型,代码中映射的字段类型设置为 Timestamp类型, private Timestamp date;  在映射文件中 <property name="date" type="timestamp" column="sj"/> Type也是时间戳类型的。在赋值取值的时候用前面的操作获取到需要的时间的时间戳对象直接赋值就行。然后就可以用Hibernate执行方法将带时分秒的时间存入到数据库里了。(不过这一点意义好像不是很大,大多都是直接varchar2存进去,取时候再to_date一下或者在代码里处理)
      还需要说一点的就是
在使用SimpleDateFormat时格式化时间的 yyyy.MM.dd 为年月日而如果希望格式化时间为12小时制的,则使用hh:mm:ss 如果希望格式化时间为24小时制的,则使用HH:mm:ss,上代码:
[java] view plaincopy
SimpleDateFormat ss = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//12小时制     
 
[java] view plaincopy
SimpleDateFormat sdformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小时制  
 
[java] view plaincopy
Date d = new Date();  
        SimpleDateFormat ss = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//12小时制  
        System.out.println(ss.format(d));  
  
        Date date = new Date();  
        SimpleDateFormat sdformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小时制  
        String LgTime = sdformat.format(date);  
        System.out.println(LgTime);  
  
  
结果为  
2008-05-28 01:32:54  
2008-05-28 13:32:54  
 Date类,已经很少用了。更多使用的是Calendar   
  Calendar    date    =    Calendar.getInstance();   
  date.get(Calendar.HOUR_OF_DAY    );//得到24小时机制的   
  date.get(Calendar.HOUR);//    得到12小时机制的   

java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间的更多相关文章

  1. java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和总结

    在web开发中,避免不了对日期的操作,就几种常见的日期操作做个总结(部分参考网络,在此表示感谢): java.util.Date.java.sql.Date.java.sql.Time.java.sq ...

  2. java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和联系

    java.util.Date.java.sql.Date.java.sql.Time.java.sql.Timestamp区别和联系 栏目:Java基础 作者:admin 日期:2015-04-19  ...

  3. java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结

    java.lang.Object ....|__java.util.Date ..........|__java.sql.Date/java.sql.Timestamp /java.sql.Time ...

  4. 解决Apache CXF 不支持传递java.sql.Timestamp和java.util.HashMap类型问题

    在项目中使用Apache开源的Services Framework CXF来发布WebService,CXF能够很简洁与Spring Framework 集成在一起,在发布WebService的过程中 ...

  5. mybatis invalid comparison: java.sql.Timestamp and java.lang.String报错解决方法

    这个错的意思是:java.sql.Timestamp和java.lang.String无效的比较 错误的原因是:拿传入的时间类型参数与空字符串进行比较就会报这个异常 解决方法:只保留非null判断就可 ...

  6. java向oracle数据库中插入当前时间

    public class Test{public static void main (String args []){ java.util.Date a = new java.util.Date(); ...

  7. MySQL_(Java)使用JDBC向数据库中插入(insert)数据

    MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC向数据库中插入(insert)数据 传送门 MySQL_(Java)使用JDBC向数据库中删除(d ...

  8. Java程序向MySql数据库中插入的中文数据变成了问号

    找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...

  9. Sql 中获取年月日时分秒的函数

    getdate():获取系统当前时间 dateadd(datepart,number,date):计算在一个时间的基础上增加一个时间后的新时间值,比如:dateadd(yy,30,getdate()) ...

随机推荐

  1. RequireJS实例分析

    随着JS越来越庞大,已经不仅仅是以前复制粘贴做特效的时代了,JS越来越偏向于业务逻辑与应用.恰逢Node的流行,JS在web开发中占有越来越重要的地位.由于JS代码庞大,文件数目多,传统的使用< ...

  2. 每天一个linux命令(13):tail 命令

    tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新, ...

  3. oracle-3-子查询和常用函数

    主要内容: >子查询 >伪例 >锁的概念 >>>1.子查询 子查询在SELECT ,UPDATE ,DELETE 语句内部可以出现SELECT 语句,内部的SELE ...

  4. Linux使用

    RedHat5 [cat] 将一个文件内容加入到另外一个另外一个文件中 参数 -n 或 --number 由 1 开始对所有输出的行数编号 -b 或 --number-nonblank 和 -n 相似 ...

  5. hdu1595 dijkstra+枚举

    开始的时候想的比较简单,直接枚举所有输入的边,但最后超时:后来就先进行一次dij,记录所有最短路上的边,然后枚举删去这些边: #include<stdio.h> #include<s ...

  6. 常用的Java 架包(jar)的用途

    前言:如果需要在项目中引入jar包,可以采用maven,配置方式在 http://mvnrepository.com 查询  slf4j-api 简介:slf4j并不是一种具体的日志系统,而是一个用户 ...

  7. BZOJ-1036 树的统计Count 链剖线段树(模板)=(树链剖分+线段树)

    潇爷昨天刚刚讲完...感觉得还可以...对着模板打了个模板...还是不喜欢用指针.... 1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Lim ...

  8. this的使用

    1.使用this调用本类中的属性 class Person{ private String name; private int age; public Person(String name,int a ...

  9. Android Studio集成SVN报错:can't use subversion command line client : svn

    Android Studio集成SVN插件,check out出代码后,每次开启都会在右上角出现如下错误: Can't use Subversion command line client: svn ...

  10. MyEclipse------如何添加jspsmartupload.jar+文件上传到服务器

    下载地址:http://download.csdn.net/detail/heidan2006/182263 如何添加jspsmartupload.jar:右键“Web”工程->properti ...