JAVA中如何将以Date型的数据保存到数据库以Datetime型的字段中

来源:互联网 发布:mysql数据库默认密码 编辑:程序博客网 时间:2024/05/20 22:39
需求:
    User对象里面有java.util.Date的birthday,我们需要存的格式为2001-01-01 01:01:01,mysql数据库中是datetime,当我们需要存入数据库或从数据库中取出来时,有一些细节必须注意!因为直接将java.util.Date存入数据库是不行的!
    为了测试,我还在表中加了一个time的字段,类型为varchar。

存入数据库:
   
    加入我们直接将birthday存入数据库:ps.setDate((java.sql.Date)user.getBirthday()),这样会出错,因为类型的差异,强转会报错!
  
    方式一:(推荐)
        所有我们需要使用到java.sql.Timestamp这个类来进行转换:
            Timestamp t = new Timestamp(user.getBirthay().getTime());
            ps.setTimestamp(3, t);

        这样就可以直接存入数据库!

    方式二:
        我们直接将birthday转换成特定格式的字符串String,存入数据库,这样也可以!:
             DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             String birthday = df.format(user.getBirthay());
             ps.setString(3, birthday);//这样和下面这样都可以!
             ps.setObject(3, birthday);


       这样转换成字符串存进数据库没问题,数据库的datetime接受特定格式的字符串,这样存进数据库还是datetime类型的值!



从数据库中取出来:

        取出来的时候就很简单了,因为java.sql.Timestamp是继承了java.util.Date,所有直接将取出来的值赋给birthdat就行了!
        Timestamp t = rs.getTimestamp("birthday");
        user.setBirthay(t);



日期比较问题:

      为了测试日期比较,排序,特意增加了一个字段time,time是varchar类型的,存的都是特定格式的日期字符串(注意是字符串),
当测试排序时,不管是tetime类型的birthday,还是varchar类型的time,都能比较和排序!
 
阅读全文
0 0