1.情景展示
使用mybatis给Oracle表插入数据的时候,报错信息如下:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='VERCODE', mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #6 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型: 1111
2.具体分析
我们知道,在SQL语句当中,如果我们在执行插入的时候,指定了某个字段,但并没有给值的情况下;
默认情况下,在插入数据时,该字段值为NULL(也就是没有给这个字段赋值)。
3.解决方案
为参数指定数据类型。
在xml里加上对应的数据类型:如下,这里我的是字符串,加:jdbcType=VARCHAR
再次执行,SQL语句输出如下:
插入成功。
同样地,如果需要将字段值更新为null的话,也需要加上。
<update id="updateJkdaUser" parameterType="hashmap">
UPDATE JKDA_USER SET VERCODE=#{VERCODE,jdbcType=VARCHAR} WHERE TELPHONE=#{TELPHONE}
</update>