我对使用MyBatis/java的简单插入有一个问题。
我对使用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
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子句中值的顺序。修复此问题可以消除异常哇。。。他们要拿走我的密码卡。无论如何,谢谢你的建议!