Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
异常:java.lang.ArrayIndexOutOfBoundsException或Oracle PreparedStatement_Java_Prepared Statement_Oracle12c - Fatal编程技术网

异常:java.lang.ArrayIndexOutOfBoundsException或Oracle PreparedStatement

异常:java.lang.ArrayIndexOutOfBoundsException或Oracle PreparedStatement,java,prepared-statement,oracle12c,Java,Prepared Statement,Oracle12c,调用方法executeBatch时,我收到一个异常java.lang.ArrayIndexOutOfBoundsException: java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(Native Method) at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:1

调用方法executeBatch时,我收到一个异常java.lang.ArrayIndexOutOfBoundsException:

java.lang.ArrayIndexOutOfBoundsException
    at java.lang.System.arraycopy(Native Method)
    at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:11107)
    at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:244)
    at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
    at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
    at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
代码如下:

// list with 2500 entries   
for (CMInfo cm : list) {
    if (cm != null) {
        int i = 1;
        stmt.setTimestamp(i++, cm.getDate());
        stmt.setString(i++, cm.getId());
        stmt.setString(i++, cm.getName());
        stmt.setString(i++, cm.getCMap()); // +/- 3000 characteres
        stmt.setString(i++, cm.getCMapIds()); // +/- 2000 characteres
        stmt.setTimestamp(i++, cm.getLastUpdate());
        stmt.setString(i++, cm.getInstance());
        stmt.setString(i++, cm.getStatus());
        stmt.setString(i++, cm.getProcessingID());
        stmt.setInt(i++, cm.getCounter());
        stmt.setInt(i++, cm.getPriority());
        stmt.addBatch();
    }
}

stmt.executeBatch();
connection.commit();

在仍然使用ojdbc7.jar驱动程序包的情况下,从Oracle11g切换到Oracle12c之后,我遇到了类似的异常。 更新驱动程序为我解决了问题。 我建议您尝试ojdbc8.jar驱动程序包,该驱动程序包位于:


不过,它确实需要Java 8。

在仍然使用ojdbc7.jar驱动程序包的情况下,从Oracle 11g切换到Oracle 12c后,我遇到了类似的异常。 更新驱动程序为我解决了问题。 我建议您尝试ojdbc8.jar驱动程序包,该驱动程序包位于:


但它确实需要Java 8。

“列出2500个条目”您确定吗?因为我相信我在调用
executeBatch()
而不先调用
addBatch()
时看到过这样的错误。某些驱动程序在尝试执行空批处理时失败。第11107行的
OraclePreparedStatement
在做什么?如果(this.batchRowsUpdatedArray!=null){assert(this.batchRowsUpdatedArray.length==this.currentRank);System.arraycopy(this.batchRowsUpdatedArray,0,localObject1,this.firstRowInBatch,this.currentRank);//第11107行}“包含2500个条目的列表”你确定吗?因为我相信我在调用
executeBatch()
而不先调用
addBatch()
时看到过这样的错误。某些驱动程序在尝试执行空批处理时失败。第11107行的
OraclePreparedStatement
在做什么?如果(this.batchRowsUpdatedArray!=null){assert(this.batchRowsUpdatedArray.length==this.currentRank);System.arraycopy(this.batchRowsUpdatedArray,0,localObject1,this.firstRowInBatch,this.currentRank);//第11107行}