天天看点

java中util.Date和数据库中datetime的操作

java中util.Date和数据库中datetime的操作! 需求:     User对象里面有java.util.Date的birthday,我们需要存的格式为2001-01-01 01:01:01,mysql数据库中是datetime,当我们需要存入数据库或从数据库中取出来时,有一些细节必须注意!因为直接将java.util.Date存入数据库是不行的!     为了测试,我还在表中加了一个time的字段,类型为varchar。

java中util.Date和数据库中datetime的操作
java中util.Date和数据库中datetime的操作

存入数据库:         加入我们直接将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);

java中util.Date和数据库中datetime的操作

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

从数据库中取出来:

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

        user.setBirthay(t);

java中util.Date和数据库中datetime的操作

日期比较问题:

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