在Mysql数据库中使用DATETIME类型来存储时间,使用JDBC中读取这个字段的时候,应该使用 ResultSet.getTimestamp(),这样会得到一个java.sql.Timestamp类型的数据。在这里既不能使用 ResultSet.getDate(),也不能使用ResultSet.getTime(),因为前者不包括time数据,后者不包括date数据。
但是在使用ResultSet.getTimestamp()时也不是完全安全的,例如,当数据库中的TIMESTAMP类型的字段值为 '0000-00-00 00:00:00'时,使用此方法进行读取,会抛出异常:Cannot convert value '0000-00-00 00:00:00' from column 1 to TIMESTAMP,这是因为JDBC不能将'0000-00-00 00:00:00'转化为一个为一个java.sql.Timestamp,在Java中,想创建一个java.util.Date,使其值为 '0000-00-00'也是不可能的,最古老的日期应该是'0001-01-01 00:00:00'。
那么在程序中该怎么办捏? 解决方案在这里:
Datetimes with all-zero components (0000-00-00 ...) — These values can not be represented reliably in Java. Connector/J 3.0.x always converted them to NULL when being read from a ResultSet.
Connector/J 3.1 throws an exception by default when these values are encountered as this is the most correct behavior according to the JDBC and SQL standards. This behavior can be modified using the zeroDateTimeBehavior configuration property. The allowable values are:
- exception (the default), which throws an SQLException with an SQLState of S1009.
- convertToNull, which returns NULL instead of the date.
- round, which rounds the date to the nearest closest value which is 0001-01-01.
Starting with Connector/J 3.1.7, ResultSet.getString() can be decoupled from this behavior via noDatetimeStringSync=true (the default value is false) so that you can retrieve the unaltered all-zero value as a String. It should be noted that this also precludes using any time zone conversions, therefore the driver will not allow you to enable noDatetimeStringSync and useTimezone at the same time.
所以,在JDBC URL中加入zeroDateTimeBehavior信息,既可以解决:
String url = "jdbc:mysql://10.149.51.80:3306/test?relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull";
当然,也可以使用另外一个策略:round。
thanks:http://hi.baidu.com/jjpro/blog/item/4dfc8900dae09581e950cd84.html
分享到:
相关推荐
然而,当你在使用MyBatis进行数据映射时,可能会遇到一个特定的问题,即当`TIMESTAMP`字段的值为'0000-00-00 00:00:00'时,MyBatis可能无法正确处理这个特殊值,导致映射异常。这个问题通常出现在尝试插入或更新包含...
刚开始学习数据库操作,今天存数据时发现,保存的时候报错(Error 1292: Incorrect datetime value: '0000-00-00' for column 'deleted_at' at row 1) ,之后就搜索了下原因,是因为MySQL存日期时不允许出现这种格式...
time: 2012-01-01 00:00:00 timeStamp: 1538409599; time: 2018-10-01 23:59:59 timeStamp: 888645574; time: 1998-02-28 13:59:34 timeStamp: 1582991999; time: 2020-02-29 23:59:59 timeStamp: 1204300800; time...
maven-timestamp-plugin-1.0.jar
在SQL Server中,当我们在一个定义为`datetime`类型的字段中尝试插入空值或空白字符串时,系统通常会默认填充1900-01-01 00:00:00.000作为日期时间值。这是因为`datetime`类型不接受空值(NULL),如果未提供有效值...
根据提供的标题、描述、标签及部分内容,我们可以了解到这段文本主要涉及Oracle数据库中处理时间戳(`TIMESTAMP`)的相关操作。接下来将详细解释这些内容所包含的关键知识点。 ### 关键知识点解析 #### 1. `...
在Java中,`java.util.Date`类用于表示一个特定的瞬间,即从格林尼治时间1970年1月1日00:00:00开始计算的毫秒数。为了将日期转换为人类可读的格式,我们需要使用`java.text.SimpleDateFormat`类,它可以按照我们定义...
iperf3-with-timestamp-Linux-shell-cli
vip_2024.1129.-4 - iperf3-with-timestamp-Linux-shell-ser
r, --reverse: reverse sort order-R, --recurse: recurse into subdirectories-s, --sort=(field): field to sort by-S, --blocks: show number of file system blocks-t, --time: which timestamp to show for a ...
maven-timestamp-plugin-1.2-sources.jar
maven-timestamp-plugin-1.0-sources.jar
maven-timestamp-plugin-1.2.jar
maven-timestamp-plugin-0.1.jar
`micro-timestamp-master`这个文件夹很可能是包含了库的完整源码,包括`.js`文件、测试用例、README文档等,供开发者研究和使用。 总的来说,`micro-timestamp`是一个针对前端开发的实用工具,通过提供高效的时间...
在MySQL 5.6中,当你遇到"TIMESTAMP with implicit DEFAULT value is deprecated"这个警告时,这表明你在数据库的表定义或数据插入语句中使用了时间戳(TIMESTAMP)字段,并且该字段没有显式地设定默认值。这种做法在...
hashTheTimestamp ( new Date ( '2018-06-20 10:00:00 UTC+1' ) ) ; //=> '3a8828cb5f8dbd44f3165f3e733aac831ed164c9665e8c6e2e1b728f61db97bb7d920e3510b3c48d1a03f323d1d13c982ac9de4f3ff277f6a6fb55e
MODIFY COLUMN `modify_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'; ``` 除了默认值,MySQL还提供了多种日期和时间函数,如`NOW()`、`CURDATE()`、`CURTIME()`等,...
本文将深入探讨如何在JavaScript中实现时间戳格式化为“2020-10-10 12:00:00”这样的标准日期格式。 首先,我们需要了解什么是时间戳。时间戳是自1970年1月1日(UTC/GMT的午夜)以来的毫秒数。在JavaScript中,我们...
资源分类:Python库 所属语言:Python 资源全名:drf-timestamp-pagination-0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059