JDBC中有关时间、日期的处理方法

    在MySQL中提供了DATE、DATETIME、TIMESTAMP和TIME等数据类型用于存储与日期时间相关的值,但是如果查阅Java API可以发现java.sql.PreparedStatement中仅仅提供了setDate、setTime和setTimestamp等方法用于设置对应的值。方法的声明如下:
(1)void setDate(int parameterIndex, java.sql.Date x) throws SQLException
(2)void setTime(int parameterIndex, java.sql.Time x) throws SQLException
(3)void setTimestamp(int parameterIndex, java.sql.Timestamp x) throws SQLException
    从方法的声明中可以看出,各个方法需要的参数类型为java.sql.Date、java.sql.Time和java.sql.Timestamp,而从继承关系可以看出:java.sql.Date、java.sql.Time和java.sql.Timestamp均继承自java.util.Date。JDBC中的时间、日期处理与常用的java.util.Date之间存在一定的阻抗。
在MySQL中,使用如下DDL建立数据库表:
CREATE TABLE `time_test` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `col_date` date DEFAULT NULL,
  `col_time` time DEFAULT NULL,
  `col_datetime` datetime DEFAULT NULL,
  `col_timestamp` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    对于col_date和col_time列的值,我们可以使用PreparedStatement中提供的setDate()和setTime()来设置其值,但是如果设置col_datetime和col_timestamp列的值呢?首先来对col_timestamp设置其值。幸运的是,PreparedStatement中提供了setTimestamp()方法来设置其值,但是对于col_datetime的值是否也可以通过使用setTimestamp()来设置呢?事实证明是可行的。JDBC中没有提供对MySQL中datetime类型的列直接设置其值的方法,而datetime和timestamp又同时能够存储日期时间类型的数据,那么我们是否可以简单地采用timestamp类型而不使用datetime呢,答案肯定是不行的。
MySQL的官方文档中对这几种数据类型进行了阐述,可以简单总结如下:
(1)DATETIME所支持的时间范围为'1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。MySQL会使用'YYYY-MM-DD HH:MM:SS'格式来显示DATETIME类型的值;
(2)TIMESTAMP所支持的时间范围为'1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC。在MySQL中,TIMESTAMP类型的值存储为自'1970-01-01 00:00:00'UTC起的秒数,但是需要注意的是TIMESTAMP类型并不能表示'1970-01-01 00:00:00'。
    那么,如何向DATETIME类型的列中存储值呢?一种可行的方式是采用PreparedStatement提供的setString()方法,并提供满足一定格式的日期时间字符串,例如:“2011-01-18 03:15:06”,具体请参考MySQL的官方文档:http://dev.mysql.com/doc/refman/5.0/en/datetime.html。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值