2019独角兽企业重金招聘Python工程师标准>>>

Mybatis中的jdbcType的作用

使用MyBatis框架做更新操作时,在该字段需要更新的内容为空时,就会出现1111错误,也就是无效的列类型,这个时候你就要使用jdbcType。至于什么时候要使用到javaType我还没遇到过,而且我也没有听说过要使用javaType。

前天遇到一个问题 异常显示如下:

引用

Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: 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 
; uncategorized SQLException for SQL []; SQL state [99999]; error code [17004]; 无效的列类型: 1111; nested exception is java.sql.SQLException: 无效的列类型: 1111

对应的sqlmap如下:

Xml代码  

  1. <insert id="insertCustomerLog" parameterType="map">
  2. insert into customer_log
  3. (
  4. ID,
  5. CUSTOMER_SERVICE_USER_NAME,
  6. user_name,
  7. CONTENT,
  8. LOG_FIRST_TYPE,
  9. STATUS,
  10. LINKED_ID,
  11. FEE,
  12. ACCOUNT_FIRST_TYPE,
  13. ACCOUNT_SECOND_TYPE,
  14. ACCOUNT_THIRD_TYPE,
  15. LOG_SECOND_TYPE,
  16. LOG_IP,
  17. MEMO
  18. )
  19. values
  20. (
  21. seq_customer_log.nextval ,
  22. #{customerServiceUserName} ,
  23. #{username},
  24. #{content},
  25. #{logFirstType},
  26. #{status},
  27. #{linkedId},
  28. #{fee},
  29. #{accountFirstType},
  30. #{accountSecondType},
  31. #{accountThirdType},
  32. #{logSecondType},
  33. #{logIp},
  34. #{memo}
  35. )
  36. </insert>

查询了一下 一些资料说是:

引用

MyBatis 插入空值时,需要指定JdbcType 
mybatis insert空值报空值异常,但是在pl/sql不会提示错误,主要原因是mybatis无法进行转换,

所以将xml改为:

Xml代码  

  1. <insert id="insertCustomerLog1" parameterType="com.diyicai.customer.domain.CustomerLog">
  2. insert into customer_log
  3. (
  4. ID,
  5. CUSTOMER_SERVICE_USER_NAME,
  6. user_name ,
  7. CONTENT,
  8. LOG_FIRST_TYPE,
  9. STATUS,
  10. LINKED_ID,
  11. FEE,
  12. ACCOUNT_FIRST_TYPE,
  13. ACCOUNT_SECOND_TYPE,
  14. ACCOUNT_THIRD_TYPE,
  15. LOG_SECOND_TYPE,
  16. LOG_IP,
  17. MEMO
  18. )
  19. values
  20. (
  21. seq_customer_log.nextval ,
  22. #{customerServiceUserName,jdbcType=VARCHAR} ,
  23. #{username,jdbcType=VARCHAR},
  24. #{content,jdbcType=VARCHAR},
  25. #{logFirstType,jdbcType=NUMERIC},
  26. #{status,jdbcType=NUMERIC},
  27. #{linkedId,jdbcType=VARCHAR},
  28. #{fee,jdbcType=NUMERIC},
  29. #{accountFirstType,jdbcType=NUMERIC},
  30. #{accountSecondType,jdbcType=NUMERIC},
  31. #{accountThirdType,jdbcType=NUMERIC},
  32. #{logSecondType,jdbcType=NUMERIC},
  33. #{logIp,jdbcType=VARCHAR},
  34. #{memo,jdbcType=VARCHAR}
  35. )
  36. </insert>

这个时候 运行正常。

我不甘心 想试试 ibatis2 是否也有同样的问题

xml如下:

Xml代码  

  1. <insert id="BasicUserInfoDaoImpl.testMap" parameterClass="java.util.HashMap">
  2. insert into customer_log
  3. (
  4. ID,
  5. CUSTOMER_SERVICE_USER_NAME,
  6. user_name,
  7. CONTENT,
  8. LOG_FIRST_TYPE,
  9. STATUS,
  10. LINKED_ID,
  11. FEE,
  12. ACCOUNT_FIRST_TYPE,
  13. ACCOUNT_SECOND_TYPE,
  14. ACCOUNT_THIRD_TYPE,
  15. LOG_SECOND_TYPE,
  16. LOG_IP,
  17. MEMO
  18. )
  19. values
  20. (
  21. seq_customer_log.nextval ,
  22. #customerServiceUserName# ,
  23. #username#,
  24. #content#,
  25. #logFirstType#,
  26. #status#,
  27. #linkedId#,
  28. #fee#,
  29. #accountFirstType#,
  30. #accountSecondType#,
  31. #accountThirdType#,
  32. #logSecondType#,
  33. #logIp#,
  34. #memo#
  35. )
  36. </insert>

这个时候 发现 ibatis2 可以正常的执行 数据库可以正常的插入数据 。 
错误日志是在:org.apache.ibatis.type.BaseTypeHandler这个类的第17行打出的。根据异常上面的代码

Java代码  

  1. if (parameter == null) {
  2. if (jdbcType == null) {
  3. try {
  4. ps.setNull(i, JdbcType.OTHER.TYPE_CODE);
  5. } catch (SQLException e) {
  6. throw new TypeException("Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters. Cause: " + e, e);
  7. }
  8. } else {
  9. ps.setNull(i, jdbcType.TYPE_CODE);
  10. }
  11. } else {
  12. setNonNullParameter(ps, i, parameter, jdbcType);
  13. }

可以看出,是因为你传入的参数的字段为null对象无法获取对应的jdbcType类型,而报的错误。 
你只要在insert语句中insert的对象加上jdbcType就可以了,修改如下: 
#{menuTitle,jdbcType=VARCHAR} 
这样就可以解决以上错误了。 
看来需要真正的了解mybatis 和ibatis 呀。 
希望遇到同样问题的朋友一起交流。

晚上看到了http://wksandy.iteye.com/blog/1443133 感谢 感谢 WKsandy ,他的文字写得很好

引用

还有在向oracle插入数据时,mybatis3报Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters,是由于参数出现了null值,对于Mybatis,如果进行操作的时候,没有指定jdbcType类型的参数,mybatis默认jdbcType.OTHER导致,给参数加上jdbcType可解决(注意大小写)

转载于:https://my.oschina.net/architectliuyuanyuan/blog/1806447

Mybatis中的jdbcType的作用相关推荐

  1. mysql在xml中jdbctype,MyBatis中的JdbcType映射使用详解

    Java项目涉及到数据库交互,以往常用的是JDBC,现在则有Hibernate.Mybatis等这些持久化支持. 项目中用到了MyBatis,和JDBC最显著的区别,就是SQL语句配置化,通过xml文 ...

  2. MyBatis中的jdbcType

    MyBatis中常用的jdbcType BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINEDTINYINT REAL VARCHAR BINARY BLOB NVARCHA ...

  3. MyBatis中的JdbcType映射数据类型对照表

    在Mybatisd的映射文件mapper.xml中,会用jdbcType把java类映射数据库表字段,有关映射关系做个笔记,方便查阅. JdbcType Oracle MySql JdbcType A ...

  4. mybatis 中标签selectkey的作用

    <selectKey>标签的作用 https://blog.csdn.net/xueguchen/article/details/108703837

  5. Mybatis中selectKey 标签的作用,主键回填,找了好多文章没一个解释清楚。。

    (1)没有配置selectKey 标签时候插入数据: <insert id="addUser" parameterType="model.User"> ...

  6. 【Mybatis】中设置 jdbcType

    先看mybatis官方文档: http://www.mybatis.org/mybatis-3/apidocs/reference/org/apache/ibatis/type/JdbcType.ht ...

  7. MyBatis中jdbcType=INTEGER、VARCHAR作用

    Mapper.xml中 pid = #{pid,jdbcType=INTEGER} pid = #{pid} 都可以用 Mybatis中什么时候应该声明jdbcType? 当Mybatis不能自动识别 ...

  8. mybatis jdbcType的作用,无效的列类型错误解决办法

    在使用mybatis时,我们可以指定jdbcType,对jdbcType一直有疑惑,有时候可以不加,有时候不加又会报错,网上对于jdbcType的解释也不是很全面,或者可能就是错的,今天专门研究了下, ...

  9. mybatis中selectKey的作用

    selectKey的作用 属性 作用 keyProperty selectKey 语句结果应该被设置的目标属性 resultType mybatis中,返回值类型 order 可以被设置为 BEFOR ...

最新文章

  1. php where 优先,php – 使用WHERE选择所有内容
  2. 利用openssh实现chroot监牢
  3. 简单实现几种常见的前端效果,附代码!
  4. [LeetCode]: 100: Same Tree
  5. 【SAM】差异(P4248)
  6. 升级win10遇到的一些问题
  7. armbian php ldap,N1刷Armbian后刷Seafile7.1.5做家庭云盘提要
  8. LuoguP1041 传染病控制
  9. crm创建启用停用用户
  10. 使用单例时一定要注意的一个问题
  11. 黑暗之魂3设置无边窗口化
  12. 软件的生命周期与特点
  13. 转载一篇JAVA面试题
  14. DP转HDMI方案|CS5216方案应用|CS5216设计方案
  15. 【计算机网络】三传输层--可靠传输原理rdt、GBN、SR
  16. 英语口语练习三十二之英文口语中生病时该如何陈述症状
  17. 自媒体人必不可少的多平台同步、一文多发小助手
  18. 计算机电源功率如何看,小白科普之三分钟教你如何确定电源功率
  19. 1141E - Superhero Battle(数学思维) Codeforces Round #547 (Div. 3)
  20. js 动态生成 input 的绑定事件 blur 无效

热门文章

  1. Spring 中 Bean 的生命周期
  2. Java魔法堂:注解用法详解——@SuppressWarnings
  3. 如何使用LaTeX让自己不乱?
  4. 鸟哥的Linux私房菜(服务器)- 簡易 Cluster 架設
  5. 鸟哥的Linux私房菜(服务器)- 第六章、 Linux 网络侦错
  6. C++和MATLAB混合编程-DLL篇
  7. Java 文件及文件夹复制
  8. perl计算IP所在的子网范围
  9. RxJS/Cycle.js 与 React/Vue 相比更适用于什么样的应用场景?
  10. servlet解析演进(2-1)