当我从输入中给出时间戳字段的0001-01-01 00:00:00.000000
时,我得到了“THE STRING REPRESENTATION OF A DATETIME IS NOT A VALID DATETIME”。但是,当我将输入中的时间戳字段的0001
更改为0002
(作为0002-01-01 00:00:00.000000
)时,我的代码工作正常,没有任何错误。为什么会这样呢?java不支持时间戳的0001-01-01 00:00:00.000000
值吗?
我使用DB2作为我的数据库。
发布于 2014-04-23 20:31:13
在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. Datetime限制
0001-01-01-00.00.00.000000000000
http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0001029.html
发布于 2014-07-01 15:45:44
问题出在我使用的JDK版本上。在JDK 1.7中,不支持默认的时间戳0001-01-01 00.00.00.000000,我将JDK从1.7改为1.6,然后运行我的程序,这个问题得到了解决。
如果想使用JDK1.7,那么默认的时间戳应该是0002-01-01 00:00:00.000000
。在JDK1.6中,缺省的timesatmp是0001-01-01 00:00:00.000000
发布于 2014-04-24 20:28:48
在JDBC/SQLJ DB2中,有一个与时间戳值0001-01-01 00:00:00.000000
(以及9999-12-31-24.00.00.000000000000
)相关的有文档记录的行为。对于查询本身、提交查询的代码、列属性、DB2版本或平台,我们了解的还不够多,无法知道它在这种情况下可能如何应用。
查看DB2 for z/OS信息中心中的Use of PreparedStatement.setTimestamp to set values in TIMESTAMP WITH TIME ZONE columns主题,并注意与特定时间戳值相关的描述。本文的主题是关于驱动程序如何处理这些值,尽管它并没有给出太多内部细节。我怀疑驱动程序对查询进行了细微的更改,因为它不知道服务器上的确切数据类型。
有一些相关的数据类型是可能的。驱动程序可能会基于给出意外结果的假设生成稍微不合适的SQLDA。
很可能更具体的搜索可以找到更多的信息,但我不知道在不了解更多关于驱动程序内部结构的情况下,是否会找到真正的“答案”。根据版本的不同,任何JDBC/SQLJ驱动程序都可能会出现非常相似的情况。如果这种情况与PreparedStatement.setTimestamp
无关,那可能也没什么关系。必然会有相关的类/方法使用公共代码。
https://stackoverflow.com/questions/23242000
复制相似问题