JDBC - Oracle ArrayIndexOutOfBoundsException


Answers

没有看到代码,我唯一能想到的就是检查每个连接是否以线程安全的方式被访问。 Oracle驱动程序通常非常稳固。 我唯一一次看到奇怪的内部错误就是当你有不止一个线程访问同一个连接实例,并用它做怪异的事情。 它们不是线程安全的,应该保持为每个线程一个。

Question

在尝试在oracle表中插入行时遇到异常。 我为oracle 11使用ojdbc5.jar这是我正在尝试的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)



如果没有对oracle.jdbc.PreparedStatement类的访问权限(并且被强制使用java.sql.PreparedStatement,它不支持方法#setXXXAtName()),则建议的使用命名参数的解决方案不是一个选项。

我已经使用PreparedStatement和GeneratedKeyHolder方法来传递强制值(幸运地小于7),并使用返回的生成主键为其余值发出一个简单的SQL更新。




是的,除非我的鼠标光标计数是关闭的,你试图插入16个值到15列。

尝试相同的事情SQLPlus *,你应该得到ORA-00913:太多的值




Links