当前位置:  开发笔记 > 编程语言 > 正文

JDBC - Oracle ArrayIndexOutOfBoundsException

如何解决《JDBC-OracleArrayIndexOutOfBoundsException》经验,为你挑选了1个好方法。

我在尝试在oracle表中插入一行时遇到异常.我正在使用ojdbc5.jar for oracle 11这是我正在尝试的sql

INSERT INTO rule_definitions(RULE_DEFINITION_SYS,rule_definition_type,
rule_name,rule_text,rule_comment,rule_message,rule_condition,rule_active,
rule_type,current_value,last_modified_by,last_modified_dttm,
rule_category_sys,recheck_unit,recheck_period,trackable)
VALUES(RULE_DEFINITIONS_SEQ.NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)

我得到以下例外.任何帮助将不胜感激.

java.ljava.lang.ArrayIndexOutOfBoundsException: 15
at oracle.jdbc.driver.OracleSql.computeBasicInfo(OracleSql.java:950)
    at oracle.jdbc.driver.OracleSql.getSqlKind(OracleSql.java:623)
    at oracle.jdbc.driver.OraclePreparedStatement.(OraclePreparedStatement.java:1212)
    at oracle.jdbc.driver.T4CPreparedStatement.(T4CPreparedStatement.java:28)
    at oracle.jdbc.driver.T4CDriverExtension.allocatePreparedStatement(T4CDriverExtension.java:68)
    at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:3059)
    at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:2961)
    at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:5874)
    at org.jboss.resource.adapter.jdbc.WrappedConnection.prepareStatement(WrappedConnection.java:232)
    at com.gehcit.platform.cds.common.util.db.DBWrapper.executeInsertOracleReturnPK(DBWrapper.java:605)

Raimonds Sim.. 26

在Oracle Metalink(Oracle的支持站点 - 注释ID 736273.1)中,我发现这是JDBC适配器(版本10.2.0.0.0到11.1.0.7.0)中的一个错误,当您调用具有7个以上位置参数的preparedStatement时,JDBC将抛出这个错误.

如果您可以访问Oracle Metalink,那么可以选择下载所提到的补丁.

另一种解决方案是解决方法 - 使用命名参数而不是位置参数:

INSERT INTO rule_definitions(RULE_DEFINITION_SYS,rule_definition_type,
rule_name,rule_text,rule_comment,rule_message,rule_condition,rule_active,
rule_type,current_value,last_modified_by,last_modified_dttm,
rule_category_sys,recheck_unit,recheck_period,trackable)
VALUES(RULE_DEFINITIONS_SEQ.NEXTVAL,:rule_definition_type,
:rule_name,:rule_text,:rule_comment,:rule_message,:rule_condition,:rule_active,
:rule_type,:current_value,:last_modified_by,:last_modified_dttm,
:rule_category_sys,:recheck_unit,:recheck_period,:trackable)

然后使用

preparedStatement.setStringAtName("rule_definition_type", ...)

等为此查询设置命名绑定变量.



1> Raimonds Sim..:

在Oracle Metalink(Oracle的支持站点 - 注释ID 736273.1)中,我发现这是JDBC适配器(版本10.2.0.0.0到11.1.0.7.0)中的一个错误,当您调用具有7个以上位置参数的preparedStatement时,JDBC将抛出这个错误.

如果您可以访问Oracle Metalink,那么可以选择下载所提到的补丁.

另一种解决方案是解决方法 - 使用命名参数而不是位置参数:

INSERT INTO rule_definitions(RULE_DEFINITION_SYS,rule_definition_type,
rule_name,rule_text,rule_comment,rule_message,rule_condition,rule_active,
rule_type,current_value,last_modified_by,last_modified_dttm,
rule_category_sys,recheck_unit,recheck_period,trackable)
VALUES(RULE_DEFINITIONS_SEQ.NEXTVAL,:rule_definition_type,
:rule_name,:rule_text,:rule_comment,:rule_message,:rule_condition,:rule_active,
:rule_type,:current_value,:last_modified_by,:last_modified_dttm,
:rule_category_sys,:recheck_unit,:recheck_period,:trackable)

然后使用

preparedStatement.setStringAtName("rule_definition_type", ...)

等为此查询设置命名绑定变量.


它工作正常,除非需要返回生成的密钥.至少我仍然得到这个错误.我正在使用spring的模板:KeyHolder keyHolder = new GeneratedKeyHolder(); SqlParameterSource paramSource = new BeanPropertySqlParameterSource(item); simpleJdbcTemplate.getNamedParameterJdbcOperations().update(sql,paramSource,keyHolder,new String [] {"id"}); 有任何想法吗?
推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有