labManage项目小结2

来源:互联网 发布:科比生涯场均数据 编辑:程序博客网 时间:2024/05/01 04:00

最近一直纠结的一个问题就是如何讲bean,或者说实体中Date类型的属性,存进数据库中。

数据库中字段类型为Datetime类型。


刚开始找了很多方法。


首先,报的是java.util.Date和java.sql.Date不匹配异常,那首先想到的就是转换。

//首先bean中有一个Date类型对象java.sql.Date d = new java.sql.Date(bean.getDate().getTime());
上面代码实现了转换,但是这样 setDate 存入数据库,发现日期是对的,但是时间全为0.


Java的文档真的要仔细查,其实java文档已经写明了,为什么没有时间呢?

一个包装了毫秒值的瘦包装器 (thin wrapper),它允许 JDBC 将毫秒值标识为 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数。

为了与 SQL DATE 的定义一致,由 java.sql.Date 实例包装的毫秒值必须通过将小时、分钟、秒和毫秒设置为与该实例相关的特定时区中的零来“规范化”。


为了与数据库Date类型一致,所以java规范也把Date类型做成这样。数据库的Date类型就是没有时间的。Datetime才有时间。

这时,想到了一个类型,Timestamp,我们从数据库拿的时候,想拿时间,就是拿Timestamp才拿到时间。

只要把util.Date转换成Timestamp就Ok了啊。


OK。

java.sql.Timestamp tDate = new java.sql.Timestamp(bean.getDate().getTime);pstmt.setTimestamp(tDate);

就这样一句话,搞定。


当然,也有很多其他方法,还可以数据库直接设计成varchar,或者是long类型,format以后直接存。


还可以这样写。

String str =bean.getDate()+" "+bean.getTime();            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");            Date date = sdf.parse(str);            java.sql.Timestamp sqlDate = new java.sql.Timestamp(date.getTime());            db.setDate1(sqlDate);
都OK。

原创粉丝点击