Oracle 插入数据库时出现无效列索引异常

Oracle 插入数据库时出现无效列索引异常,oracle,Oracle,我在插入数据库时遇到此异常。 已经附上了痕迹 原因:java.sql.SQLException:列索引无效 在oracle.jdbc.driver.OraclePreparedStatement.setTimestampInternal(OraclePreparedStatement.java:7256) 在oracle.jdbc.driver.OraclePreparedStatement.setTimestamp(OraclePreparedStatement.java:7240)中 在or

我在插入数据库时遇到此异常。 已经附上了痕迹

原因:java.sql.SQLException:列索引无效
在oracle.jdbc.driver.OraclePreparedStatement.setTimestampInternal(OraclePreparedStatement.java:7256)
在oracle.jdbc.driver.OraclePreparedStatement.setTimestamp(OraclePreparedStatement.java:7240)中
在oracle.jdbc.driver.OraclePreparedStatementWrapper.setTimestamp(OraclePreparedStatementWrapper.java:302)中
位于org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.setTimestamp(WrappedPreparedStatement.java:554)

我的问题是

INSERT INTO SP_OPS_TEAM(
PERSON_ID
,FROM_DT
,THRU_DT
,REPORTS_TO
,CASE_MAX_ALLOWED
,PAY_AUTH_MAX
,LUMP_SUM_MAX,DAYS_MAX
,HAS_DENIAL_AUTH_IND
,HAS_MEDICAL_AUTH_IND
,OPS_PERS_TYPE_CD
,CR_TS
,CR_USER
,LST_UPDT_TS
,LST_UPDT_USER) 
VALUES (
?
,to_date(to_char(sysdate,'yyyy/MM/dd'),'yyyy/MM/dd')
,to_date('12/31/2099','MM/DD/YYYY')
,?
,?
,?
,?
,?
,?
,?
,?
,CURRENT_DATE
,?
,CURRENT_DATE
,?)
参数如下所示

[6804
, Fri Aug 17 10:59:24 IST 2012
, Fri Aug 17 10:59:24 IST 2012
, 6803
, null
, null
, null
, null
, N
, N
, TM
, Fri Aug 17 10:59:24 IST 2012
, 6803
, Fri Aug 17 10:59:24 IST 2012
, 6803]
我在第14个索引中得到了这个异常,它是LST up。db中该列的数据类型是SYSTIMESSTAMP

desc SP_OPS_TEAM
Name                 Null     Type              
-------------------- -------- ----------------- 
PERSON_ID            NOT NULL NUMBER            
FROM_DT              NOT NULL DATE              
THRU_DT              NOT NULL DATE              
REPORTS_TO           NOT NULL NUMBER(22)        
CASE_MAX_ALLOWED              NUMBER(5)         
PAY_AUTH_MAX                  NUMBER(10,4)      
LUMP_SUM_MAX                  NUMBER(10,4)      
DAYS_MAX                      NUMBER(5)         
HAS_DENIAL_AUTH_IND  NOT NULL CHAR(1 CHAR)      
HAS_MEDICAL_AUTH_IND NOT NULL CHAR(1 CHAR)      
OPS_PERS_TYPE_CD     NOT NULL VARCHAR2(25 CHAR) 
CR_TS                NOT NULL TIMESTAMP(6)      
CR_USER              NOT NULL NUMBER(22)        
LST_UPDT_TS          NOT NULL TIMESTAMP(6)      
LST_UPDT_USER        NOT NULL NUMBER(22)        
任何帮助都将不胜感激

当前日期不是时间戳。然而,它们应该是自由兑换的

我有点困惑,您的参数如何与查询中的
对齐。在使用系统内置值填充数据值时,为什么要传递数据值

无论如何,
Fri Aug 17 10:59:24 IST 2012
不是Oracle的默认格式之一。因此,除非您的NLS设置不同,否则您需要包含一个显式格式掩码


而且你不需要用它来和sysdate约会(TO_CHAR())。所有日期都以Oracle的标准格式存储:掩码仅用于格式化输入或输出

你说你“在第14个索引中得到了这个异常”,它似乎来自类似于
stmt.setTimestamp(14,…)
。您正在插入15列,但只有11个位置参数(
),其他4个参数在查询中设置-使用
to_date()
CURRENT_date
子句。因此,14确实不是一个有效的索引,如果超过11,就会出现错误,并且可能会出现一些数据转换问题

根据所显示的内容,您不需要尝试设置任何日期/时间戳值,因此根本不应该有任何
stmt.setDate()
stmt.setTimestamp()
调用

此外,正如APC所指出的,您正在对两列
时间戳
使用
CURRENT\u DATE
;如果需要精度,可以使用
CURRENT\u TIMESTAMP
。如果
to_date(to_char(sysdate,…)
背后的想法只是失去时间部分,那么您可以使用
trunc(sysdate)
使其更清晰、更简单


不过,这些并没有造成任何直接问题。使用
12/31/2099
作为神奇日期,我有更多的问题;总有一天,这会让人头疼,看起来像是千禧年的重演。(当然,我们都希望在它成为一个问题之前退休,但仍然…

让我接受一个答案,我得到一个关于这个@alfasinYour error satck提到
setTimestamp()
的答案,但不清楚您在代码中使用它的位置。是Java报告时显示的参数;你把日期换了吗?您能展示您正在使用的Java代码吗?准备语句并设置所有参数?