我对使用MyBatis/java的简单插入有一个问题。

我对使用MyBatis/java的简单插入有一个问题。,java,insert,sequence,mybatis,Java,Insert,Sequence,Mybatis,我对使用myBatis和java的简单插入有一个问题 例外情况是: org.apache.ibatis.executor.ExecutorException: Error preparing statement. Cause: java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 12 my mapper中的查询如下所示: <insert id="insertRuleResu

我对使用myBatis和java的简单插入有一个问题

例外情况是:

org.apache.ibatis.executor.ExecutorException: 
    Error preparing statement. Cause: 
    java.lang.ArrayIndexOutOfBoundsException: 
    Array index out of range: 12 
my mapper中的查询如下所示:

<insert id="insertRuleResult"
    useGeneratedKeys="true"
    keyProperty="ruleResult.recordDetailId"
    keyColumn="RECORD_DETAIL_ID">

INSERT INTO KMV_DBO.RULE_RESULT(
    RECORD_ID,
    RECORD_DETAIL_ID,
    SUBJECT_AREA_ID,
    RULE_NAME,
    RULE_RESULT,
    MESSAGE,
    COLUMN_NAME,
    ORIGINAL_VALUE,
    NEW_VALUE,
    STATUS,
    SOURCE,
    USER_NOTE,
    CREATED_DATE,
    BATCH_STATUS,
    UPDATED_BY,
    UPDATED_DATE
)
VALUES (
    KMV_DBO.RULE_IMPACTED_DETAIL_SEQ.NEXTVAL,
    #{ruleResult.subjectAreaId,jdbcType=VARCHAR},
    #{ruleResult.ruleName,jdbcType=VARCHAR},
    #{ruleResult.ruleResult,jdbcType=VARCHAR},
    #{ruleResult.message,jdbcType=VARCHAR},
    #{ruleResult.columnName,jdbcType=VARCHAR},
    #{ruleResult.originalValue,jdbcType=VARCHAR},
    #{ruleResult.newValue,jdbcType=VARCHAR},
    #{ruleResult.recordId,jdbcType=NUMERIC},
    #{ruleResult.status,jdbcType=VARCHAR},
    #{ruleResult.source,jdbcType=VARCHAR},
    #{ruleResult.userNote,jdbcType=VARCHAR},
    SYSDATE,
    'Open',
    #{user.nwieId,jdbcType=VARCHAR},
    NULL
)
</insert> 
我尝试了以下变体,但如果不使用模式所有者id进行连接,它也不起作用。找不到错误序列:

<insert id="insertRuleResult">
  <selectKey keyProperty="ruleResult.recordDetailId" keyColumn="RECORD_DETAIL_ID" resultType="int" order="BEFORE">
      SELECT RULE_IMPACTED_DETAIL_SEQ.NEXTVAL FROM DUAL
  </selectKey>
  INSERT INTO KMV_DBO.RULE_RESULT(
      RECORD_ID,
      RECORD_DETAIL_ID,
      SUBJECT_AREA_ID,
      RULE_NAME,
      RULE_RESULT,
      MESSAGE,
      COLUMN_NAME,
      ORIGINAL_VALUE,
      NEW_VALUE,
      STATUS,
      SOURCE,
      USER_NOTE,
      CREATED_DATE,
      BATCH_STATUS,
      UPDATED_BY,
      UPDATED_DATE
  ) VALUES (
      #{ruleResult.recordId,jdbcType=NUMERIC},
      #{ruleResult.recordDetailId,jdbcType=NUMERIC},
      #{ruleResult.subjectAreaId,jdbcType=VARCHAR},
      #{ruleResult.ruleName,jdbcType=VARCHAR},
      #{ruleResult.ruleResult,jdbcType=VARCHAR},
      #{ruleResult.message,jdbcType=VARCHAR},
      #{ruleResult.columnName,jdbcType=VARCHAR},
      #{ruleResult.originalValue,jdbcType=VARCHAR},
      #{ruleResult.newValue,jdbcType=VARCHAR},
      #{ruleResult.status,jdbcType=VARCHAR},
      #{ruleResult.source,jdbcType=VARCHAR},
      #{ruleResult.userNote,jdbcType=VARCHAR},
      SYSDATE,
      'Open',
      #{user.nwieId,jdbcType=VARCHAR},
      NULL
  )
</insert>
插入的值是基本字符串和数字

谢谢你的建议

org.apache.ibatis.executor.executor异常: 准备语句时出错。原因: java.lang.ArrayIndexOutOfBoundsException: 数组索引超出范围:12

这意味着它在13号失败,因为内部数组是基于零的值,即SYSDATE


我建议,首先尝试插入硬编码值,看看它是否有效,然后传递动态值

第二个示例中的sequence not found错误听起来像是权限问题。考虑与该语句关联的用户是否具有所有必要的GrANSOSH,并且没有指定该示例的模式,可以从双选择KMvyDBO.RuleUnActudioTexILILL SEQ.NEXVALVE吗?我的神谕生锈了。。。。。是的,我忘记在第二次尝试中指定模式了。这为我解决了这个问题。谢谢你的第二套眼球!我正要接受你的建议,将值中的参数更改为硬编码值。然后我注意到我不知怎么搞砸了values子句中值的顺序。修复此问题可以消除异常哇。。。他们要拿走我的密码卡。无论如何,谢谢你的建议!