我得到“日期时间值的字符串表示是不是一个有效日期时间值”的时候,我给0001-01-01 00:00:00.000000
对时间戳字段从输入。 但是,当我改变0001
到0002
给出0002-01-01 00:00:00.000000
从输入时间戳字段,我的代码是没有任何错误做工精细。 为什么会这样? 将使用Java是支持0001-01-01 00:00:00.000000
对时间戳值?
我使用DB2作为我的数据库。
我得到“日期时间值的字符串表示是不是一个有效日期时间值”的时候,我给0001-01-01 00:00:00.000000
对时间戳字段从输入。 但是,当我改变0001
到0002
给出0002-01-01 00:00:00.000000
从输入时间戳字段,我的代码是没有任何错误做工精细。 为什么会这样? 将使用Java是支持0001-01-01 00:00:00.000000
对时间戳值?
我使用DB2作为我的数据库。
在DB2中,SQLCODE SQL0181意味着,给定表示无效
db2 ? sql0181
然而,当我在DB2写你的日期,它接受它:
db2 "values timestamp('0001-01-01 00:00:00.000000')"
1
--------------------------
0001-01-01 00:00:00.000000
1 record(s) selected.
然而,当我把一个无效的日期,如13个月,它返回你的错误代码
db2 "values timestamp('0001-13-01 00:00:00.000000')"
1
--------------------------
SQL0181N The string representation of a datetime value is out of range.
我觉得你有那不符合所提供的日期时间区域和区域设置的问题。
运行此命令,然后开始修改日期
db2 "values current timestamp"
表6.日期时间限制
http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0001029.html
有相关的时间戳值的记录的行为0001-01-01 00:00:00.000000
(以及为9999-12-31-24.00.00.000000000000
在JDBC / SQLJ用于DB2)。 没有足够的人知道查询本身,即提交查询,列属性的代码中,DB2版本,也不是平台来告诉它如何可能适用于这种情况。
查看使用了PreparedStatement.setTimestamp的设置在TIMESTAMP WITH值TIME ZONE列在DB2 z / OS版信息中心主题,并注意同特定的时间戳值的说明。 主题是关于驱动程序如何处理这些价值,虽然它并没有真正提供多少内部细节。 我怀疑司机正在对查询的微小变化,因为它不知道在服务器的确切数据类型。
但是也有一些可能的相关数据类型。 该驱动程序可能基于一个假设,即给出了意想不到的结果稍有不当SQLDA。
这可能是更具体的搜索可以找到更多的信息,但我不知道实际的“答案”会不知道了很多关于驱动程序的内部找到。 有可能会发现任何根据版本等的JDBC / SQLJ驱动程序非常相似条件。如果这种情况不完全了解PreparedStatement.setTimestamp
,它可能并不重要。 肯定有很多使用通用代码相关的类/方法。
问题是我使用它的JDK版本,。 在JDK 1.7时间戳0001-01-01 00.00.00.000000不支持默认情况下,我改变了我的JDK从1.7到1.6,跑了我的程序,这个问题得到了解决。
如果要使用JDK 1.7,那么默认的时间戳应该是0002-01-01 00:00:00.000000
。 在JDK 1.6的情况下,默认timesatmp为0001-01-01 00:00:00.000000