我在尝试在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", ...)
等为此查询设置命名绑定变量.
在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", ...)
等为此查询设置命名绑定变量.