Вставка данных в 27 столбцов таблицы БД с использованием SQLParameterSource — сбой с исключением ArrayIndexOutOfBounds

#java #spring #spring-jdbc

#java #весна #spring-jdbc

Вопрос:

У меня возникла аналогичная проблема при вставке данных в таблицу БД с 27 столбцами. Я использую класс NamedParameterJdbcTemplate для вставки данных. Любая помощь в этом отношении действительно полезна. Пожалуйста, найдите приведенный ниже фрагмент кода

 SqlParameterSource parameters = new MapSqlParameterSource()
.addValue("Id", 12345678)
.addValue("packageId", info.getIrocPkgId())
.addValue("isAsgn", 1)
.addValue("startTm", info.getStartTm())
.addValue("endTm", info.getEndTm())
.addValue("type", ConstantVal.TASK)
.addValue("note", ConstantVal.ETA   ":"   info.getEta())
.addValue("fdbk", ConstantVal.EMPTY)
.addValue("sCnt", 1)
.addValue("aCd", ConstantVal.ETA)
.addValue("isAuto", 1)
.addValue("dfltStartTm", info.getStartTm())
.addValue("dfltEndTm", info.getEndTm())
.addValue("aInfo", ConstantVal.EMPTY)
.addValue("stat", ConstantVal.ACTIVE)
.addValue("cnclTask", ConstantVal.ZERO)
.addValue("asgnNbr", ConstantVal.EMPTY)
.addValue("priInd", ConstantVal.ZERO)
.addValue("ovlpMatchNbr", ConstantVal.EMPTY)
.addValue("attchIds", ConstantVal.EMPTY)
.addValue("aType", ConstantVal.EMPTY)
.addValue("lInd", ConstantVal.ZERO)
.addValue("pAsgn", ConstantVal.ZERO)
.addValue("rId", ConstantVal.EMPTY)
.addValue("bInd", ConstantVal.EMPTY)
.addValue("createDtTm", new Timestamp((new Date()).getTime()))
.addValue("updatedDtTm", ConstantVal.EMPTY);
int nb = namedParameterJdbcTemplate.update(insertRecords, parameters, keyHolder,new String[] { "ID" });
  

SQL-запрос в beans.xml приведено ниже

 <bean id="insertRecords" class="java.lang.String"
scope="prototype">
<constructor-arg type="java.lang.String"
value="
INSERT
INTO
XYZ
(
    ID,
    PACKAGE_ID,
        IS_ASGN,
        START_TM,
        END_TM,
        TYPE,
        NOTE,
        FDBK,
        S_CNT,
        A_CD,
        IS_AUTO,
        DFLT_START_TM,
        DFLT_END_TM,
        A_INFO,
        STAT,
        IS_CNCL_TASK,
        ASGN_NBR,
        PRI_ASGN_IND,
        OVLP_MATCH_NBR,
        A_IDS,
        ASGN_TYPE,
        LOCK_IND,
        P_ASGN,
        R_ID,
        B_IND,
        CREATED_DT_TM,
    UPDATED_DT_TM
)
VALUES
(
    :Id,
    :packageId,:isAsgn,:startTm,:endTm,:type,:note,:fdbk,:sCnt,:aCd,:isAuto,:dfltStartTm,:dfltEndTm,:aInfo,
        :stat,:cnclTask,:asgnNbr,:priInd,:ovlpMatchNbr,:attchIds,:aType,:lInd,:pAsgn,:rId,
        :bInd,:createDtTm,:updatedDtTm) " />
</bean>
  

При вставке данных я вижу приведенную ниже ошибку

 java.lang.ArrayIndexOutOfBoundsException
    at oracle.jdbc.driver.OracleSql.computeBasicInfo(OracleSql.java:950)
    at oracle.jdbc.driver.OracleSql.getSqlKind(OracleSql.java:623)
    at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedStatement.java:1212)
    at oracle.jdbc.driver.T4CPreparedStatement.<init>(T4CPreparedStatement.java:28)
    at oracle.jdbc.driver.T4CDriverExtension.allocatePreparedStatement(T4CDriverExtension.java:68)
    at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:3140)
    at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:3042)
    at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:6022)
    at oracle.jdbc.OracleConnectionWrapper.prepareStatement(OracleConnectionWrapper.java:679)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.pmiPrepareStatement(WSJdbcConnection.java:5071)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:4946)
    at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.createPreparedStatement(PreparedStatementCreatorFactory.java:231)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:638)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:943)
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:344)
  

Комментарии:

1. Какую версию драйвера Oracle JDBC вы используете? Это звучит как ошибка внутри драйвера Oracle JDBC.

2. Мы используем приведенную ниже версию jar, не уверены в версии драйвера <dependency> <groupId>oracle</groupId> <artifactId>ojdbc</artifactId> <version>6</version> </dependency>

3. Это не настоящая версия драйвера Oracle JDBC. Похоже, что вы (или кто-то другой) установили это в репозиторий maven вашей компании (или репозиторий в вашей локальной системе) с целевой версией Java в качестве версии (6 в ojdbc6 указывает, что это вариант драйвера для Java 6, это не версиядрайвер). Это не фактическая версия драйвера.

4. В любом случае варианты драйвера ojdbc6 довольно устарели. Возможно, вы захотите обновить до более новой версии (и, возможно, одновременно использовать версию из Maven Central Java 8 , Java 10 )

5. Спецификация драйвера-Версия: версия драйвера Oracle JDBC — «11.1.0.6.0-Product