labManage项目小结2

最近一直纠结的一个问题就是如何讲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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值