【发布时间】:2014-01-16 08:10:25
【问题描述】:
我目前正在尝试将日期插入到我的本地 Oracle 数据库中,插入是在使用通配符的 java JAR 文件中编写的。如果我将日期发送为 null,则 INSERT 有效,但是当我尝试发送日期时,我收到以下错误:
ORA-01821: date format not recognized
我已经运行了两个 SQL 命令:
SELECT PARAMETER, VALUE FROM v$nls_parameters;
SELECT CURRENT_TIMESTAMP FROM DUAL;
返回此数据:
PARAMETER VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
NLS_LANGUAGE ENGLISH
NLS_TERRITORY UNITED KINGDOM
NLS_CURRENCY £
NLS_ISO_CURRENCY UNITED KINGDOM
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE ENGLISH
NLS_CHARACTERSET AL32UTF8
NLS_SORT BINARY
NLS_TIME_FORMAT HH24.MI.SSXFF
NLS_TIMESTAMP_FORMAT DD-MON-RR HH24.MI.SSXFF
NLS_TIME_TZ_FORMAT HH24.MI.SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH24.MI.SSXFF TZR
NLS_DUAL_CURRENCY €
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
19 rows selected
CURRENT_TIMESTAMP
------------------------------------
16-JAN-14 08.03.06.437000000 EUROPE/
LONDON
查看上面的数据后,我尝试修改我准备好的语句以匹配显示的时间戳:
TO_TIMESTAMP(?,'DD-MON-RR HH24.MI.SSXFF TZR')
TO_TIMESTAMP(?,'DD-MON-RR HH24.MI.SSXFF')
在哪里?是我使用 java 传入的通配符值,即interaction.getStartDate();
有谁知道如何找到正确的格式或我哪里出错了?这几天上网查了一下,一脸懵。
【问题讨论】:
-
为什么需要日期格式?日期格式用于字符串和日期之间的转换。
-
我无法控制数据库设置,并且该字段已设置为 TIMESTAMP
-
数据库中已有日期,其中之一的示例是:17-JUL-13 15.31.07.000000000
-
但是 JDBC 驱动程序应该处理这个问题。您只需绑定一个 java.util.Date 或 java.sql.Date 对象(或 java.sql.Timestamp,如果您需要几分之一秒),JDBC 驱动程序应将其映射到正确的 SQL 语句。顺便说一句,您的示例 (17-JUL-13 15.31.07.000000000) 没有显示时间戳是如何存储的,只是在您获取时间戳时它们是如何呈现的(作为一个字符串)。
-
@MrBackend: java.util.Date 无法绑定。 java.sql.Date 是没有时间的日期,java.sql.Timestamp 是日期和时间。不过,我同意这是正确的解决方案。
标签: java sql date oracle11g wildcard