Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQLCODE-181日期时间值的字符串表示形式不是有效的日期时间值_Java_Database_Db2 - Fatal编程技术网

Java SQLCODE-181日期时间值的字符串表示形式不是有效的日期时间值

Java SQLCODE-181日期时间值的字符串表示形式不是有效的日期时间值,java,database,db2,Java,Database,Db2,当我从输入中为时间戳字段指定0001-01-01 00:00:00.000000时,我得到了“日期时间值的字符串表示形式不是有效的日期时间值”。但是,当我从输入中将时间戳字段的0001更改为0002时,我的代码工作正常,没有任何错误。为什么会这样?java是否不支持时间戳的0001-01-01 00:00:00.000000值 我使用DB2作为数据库。在DB2中,SQLCODE SQL0181表示给定的表示形式无效 db2 ? sql0181 但是,当我在DB2中写入您的日期时,它接受它: d

当我从输入中为时间戳字段指定
0001-01-01 00:00:00.000000时,我得到了“日期时间值的字符串表示形式不是有效的日期时间值”。但是,当我从输入中将时间戳字段的
0001
更改为
0002
时,我的代码工作正常,没有任何错误。为什么会这样?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。日期时间限制

  • 最小时间戳值0001-01-01-00.00.00.000000000000
  • 最大时间戳值9999-12-31-24.00.00.000000000000

在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。日期时间限制

  • 最小时间戳值0001-01-01-00.00.00.000000000000
  • 最大时间戳值9999-12-31-24.00.00.000000000000

在DB2的JDBC/SQLJ中,有一个与时间戳值
0001-01-01 00:00:00.000000
(以及
9999-12-31-24.00.00.000000000000
)相关的记录行为。对于查询本身、提交查询的代码、列属性、DB2版本或平台,我们了解的还不够,无法说明在这种情况下如何应用查询

查看DB2forz/OS信息中心中的主题,并注意与特定时间戳值相关的描述。本主题是关于驱动程序如何处理这些值,尽管它没有给出太多内部细节。我怀疑驱动程序正在对查询进行轻微更改,因为它不知道服务器上的确切数据类型

可能存在相关的数据类型。驱动程序可能会基于产生意外结果的假设生成稍微不合适的SQLDA


更具体的搜索可能会找到更多信息,但我不知道在不了解更多驱动程序内部信息的情况下,是否会找到真正的“答案”。对于任何JDBC/SQLJ驱动程序,都可能会发现非常类似的情况,具体取决于版本等。如果这种情况与
PreparedStatement.setTimestamp
不完全相关,则可能无关紧要。使用公共代码必然会有相关的类/方法。

在DB2的JDBC/SQLJ中有一个与时间戳值
0001-01-01 00:00:00.000000
(以及
9999-12-31-24.00.00.00.000000000000
)相关的记录行为。对于查询本身、提交查询的代码、列属性、DB2版本或平台,我们了解的还不够,无法说明在这种情况下如何应用查询

查看DB2forz/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

问题在于我使用的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

请给出上下文--这个值在哪里,是另一个语句的一部分,是来自Excel电子表格还是从乌尔都语翻译过来的?假设我们不知道您的情况。我正在使用java和hibernate。例如,我需要更新Employee表中已更新的_时间戳(Timestamp)。我在java代码中手动将更新的_Timestamp字段值设置为0001-01-01 00:00:00.000000,并尝试更新(dao.update(Employee))表。更新时出现-181错误。您使用的是哪个DB2JCC驱动程序版本?您在这里发布的错误消息是什么