异常日志如下:
java.lang.ArrayIndexOutOfBoundsException: -32653
     at
oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePreparedStatement.java:2673)
     at
oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10689)
     at
weblogic.jdbc.wrapper.PreparedStatement_oracle_jdbc_driver_T4CPreparedStatement.executeBatch(UnknownSource)
     at
org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:763)
     at
org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:460)
     at
org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:489)
     at
org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:754)
...哪位大哥遇到过类似情况或者知道如何如何解决,希望不吝赐教,急啊。
如果问题描述得不够详细,我就把DAO层的代码贴出来。暂时不贴主要是担心贴出来一大串不好看。

解决方案 »

  1.   

    DAO层代码如下:
    public void insertAddDeclare(final String lsh, final List data,
    final Properties relation) throws BusinessException {
    StringBuffer sql = new StringBuffer();
    sql.append(" insert into T_ZSSB_SBJFXZMX (SBLSH, SFZHM, GR_ID, XM, ");
    sql.append("        YJFE_JE) ");
    sql.append(" values (?, ?, ?, ?, ?) "); try {
    getJdbcTemplate().batchUpdate(sql.toString(),
    new BatchPreparedStatementSetter() { public void setValues(PreparedStatement ps, int index)
    throws SQLException {
    Map m = (Map) data.get(index);
    int i = 0;
    ps.setString(++i, lsh);
    try {
    String card = m.get("SFZHM").toString().trim();
    String name = m.get("XM").toString().trim();
    String id = relation.getProperty(card);
    ps.setString(++i, card);
    ps.setString(++i, id.trim());
    ps.setString(++i, name);
    ps.setString(++i, m.get("ZSXMDM").toString());
    } catch (NullPointerException e) {
    throw new NullPointerException("第" + index
    + "行、第" + i + "个字段出现空值");
    }
    } public int getBatchSize() {
    return data.size();
    } });
    } catch (DataAccessException e) {
    throw new BusinessException("5003", e.getMessage());
    } catch (NullPointerException e) {
    throw new BusinessException("6401", e.getMessage());
    } catch (NoSuchFieldError e) {
    throw new BusinessException("6407", e.getMessage());
    }
    }
    我跟了一下JdbcTemplate的batchUpdate方法,出错的地方不在上面回调的方法体内,也就是说上面这段代码没问题。从上面异常日志来看,报错的地方是在jdbc驱动包中某个类的方法里。所以我想知道什么情况下批量更新会发生数组越界?