mybatis在更新数据或者插入数据为空的时候必须指定jdbcType类型

1:传入的参数是对象类型

  1. User user =new User();
  2. INSERT INTO t_user (
  3. id,
  4. uid,
  5. sn,
  6. EXPIRY_DATE,
  7. STUS,
  8. REASON,
  9. REMARK,
  10. )VALUES(
  11. SEQ_user.NEXTVAL,
  12. #{uid,jdbcType=VARCHAR},
  13. #{sn,jdbcType=VARCHAR},
  14. #{expiryDate,jdbcType=DATE},
  15. #{stus,jdbcType=VARCHAR},
  16. #{reason,jdbcType=VARCHAR},
  17. #{remark,jdbcType=VARCHAR},
  18. )

如果传入的参数是此""而不是null值,则可以不用指定jdbcType
如果不设置值或者设置Null则必须指定jdbcType

2:传入参数是一个个传入的

  1. public Integer updateRechargeStus(
  2. @Param("sn") String sn,
  3. @Param("stus") String stus,
  4. @Param("reason") String reason) throws DaoException;
  5.  
  6. <update id="updateStus">
  7. update t_user t set t.STUS=#{stus},t.REASON = #{reason} where t.sn=#{sn}
  8. </update>

  

如果传入的sn或者stus都是此"",则不用指定jdbcType;如果传入null则需要指定jdbcType

3:对于查询也是,传入的参数不能为null指

4:拓展
如果把所有的数据类型指定后,传入的null值不会报错,在查找数据的时候就需要注意这些。

  1. org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='mbrTyp', mode=IN, javaType=class java.lang.Long, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #2 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型
  2. at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
  3. at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:364)
  4. at com.sun.proxy.$Proxy18.update(Unknown Source)
  5. at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:250)
  6. at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:55)
  7. at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
  8. at com.sun.proxy.$Proxy21.awardSchemeUpdate(Unknown Source)
  9. at com.mangocity.dao.point.AwardSchemeTest.awardSchemeUpdate(AwardSchemeTest.java)
  10. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  11. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  12. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  13. at java.lang.reflect.Method.invoke(Method.java:498)
  14. at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
  15. at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
  16. at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
  17. at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
  18. at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
  19. at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
  20. at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
  21. at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
  22. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
  23. at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
  24. at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
  25. at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
  26. at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
  27. at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
  28. at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
  29. at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
  30. at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
  31. at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
  32. at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
  33. at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
  34. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
  35. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
  36. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
  37. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
  38. Caused by: org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='mbrTyp', mode=IN, javaType=class java.lang.Long, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #2 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型
  39. at org.apache.ibatis.scripting.defaults.DefaultParameterHandler.setParameters(DefaultParameterHandler.java:89)
  40. at org.apache.ibatis.executor.statement.PreparedStatementHandler.parameterize(PreparedStatementHandler.java:85)
  41. at org.apache.ibatis.executor.statement.RoutingStatementHandler.parameterize(RoutingStatementHandler.java:63)
  42. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  43. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  44. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  45. at java.lang.reflect.Method.invoke(Method.java:498)
  46. at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)
  47. at com.sun.proxy.$Proxy24.parameterize(Unknown Source)
  48. at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:77)
  49. at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:48)
  50. at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:115)
  51. at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:75)
  52. at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:170)
  53. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  54. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  55. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  56. at java.lang.reflect.Method.invoke(Method.java:498)
  57. at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:354)
  58. ... 34 more
  59. Caused by: org.apache.ibatis.type.TypeException: Error setting null for parameter #2 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型
  60. at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:47)
  61. at org.apache.ibatis.scripting.defaults.DefaultParameterHandler.setParameters(DefaultParameterHandler.java:87)
  62. ... 52 more
  63. Caused by: java.sql.SQLException: 无效的列类型
  64. at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
  65. at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
  66. at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
  67. at oracle.jdbc.driver.OracleStatement.getInternalType(OracleStatement.java:3432)
  68. at oracle.jdbc.driver.OraclePreparedStatement.setNullCritical(OraclePreparedStatement.java:4197)
  69. at oracle.jdbc.driver.OraclePreparedStatement.setNull(OraclePreparedStatement.java:4186)
  70. at org.apache.commons.dbcp.DelegatingPreparedStatement.setNull(DelegatingPreparedStatement.java:108)
  71. at org.apache.commons.dbcp.DelegatingPreparedStatement.setNull(DelegatingPreparedStatement.java:108)
  72. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  73. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  74. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  75. at java.lang.reflect.Method.invoke(Method.java:498)
  76. at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:67)
  77. at com.sun.proxy.$Proxy26.setNull(Unknown Source)
  78. at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:45)
  79. ... 53 more

  

最近使用oracle,一些笔记都直接记载到了有道云笔记里面去了,慢慢整理下了。

MyBatis操作oracle的一些问题加载的更多相关文章

  1. MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束

    最近在使用MyBatis操作Oracle数据库的时候,进行批量插入数据,思路是封装一个List集合通过Myabtis 的foreach标签进行循环插入,可是搬照Mysql的批量插入会产生 异常 ### ...

  2. 关于VS连接Oracle数据库提示:“尝试加载oracle客户端时引发badimage,如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题”的解决方案。

    错误一.关于VS连接Oracle数据库提示:“尝试加载oracle客户端时引发badimage,如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题”的解决方案. ...

  3. 精尽 MyBatis 源码分析 - MyBatis 初始化(一)之加载 mybatis-config.xml

    该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...

  4. 精尽MyBatis源码分析 - MyBatis初始化(二)之加载Mapper接口与XML映射文件

    该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...

  5. MyBatis入门(五)---延时加载、缓存

    一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...

  6. Mybatis学习(6)动态加载、一二级缓存

    一.动态加载: resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 需求: 如 ...

  7. mybatis和hibernate中的懒加载

    概念:所谓懒加载就是延时加载,延迟加载.什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载.至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,因为内存容量有限 ,为了减 ...

  8. mybatis源码解析之Configuration加载(三)

    概述 上一篇我们主要分析了下<environments>标签下面,transactionManager的配置,上问最后还有个遗留问题:就是在设置事物管理器的时候有个autocommit的变 ...

  9. mybatis源码解析之Configuration加载(二)

    概述 上一篇我们讲了configuation.xml中几个标签的解析,例如<properties>,<typeAlises>,<settings>等,今天我们来介绍 ...

随机推荐

  1. 几个好用的php函数

    几个好用的php函数 1.PHP加密解密 PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串,该函数使用了base64和MD5加密和解密. function enc ...

  2. PHPDoc 学习记录

    https://zh.wikipedia.org/wiki/PHPDoc PHPDoc 是一个 PHP 版的 Javadoc.它是一种注释 PHP 代码的正式标准.它支持通过类似 phpDocumen ...

  3. Scrum立会报告+燃尽图(Beta阶段第二周第一次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2409 项目地址:https://coding.net/u/wuyy694 ...

  4. RIGHT-BICEP单元测试——“二柱子四则运算升级版”

    RIGHT-BICEP单元测试 ——“二柱子四则运算升级版” ”单元测试“这对于我们来说是一个全新的专业含义,在上了软件工程这门课,并当堂编写了简单的"求一组数中的最大值"函数的单 ...

  5. java.lang.NoClassDefFoundError: Lcom/opensymphony/xwork2/util/logging/Logger tomcat6 启动错误

    用tomcat6启动时,出现下面的错误Java.lang.NoClassDefFoundError: Lcom/opensymphony/xwork2/util/logging/Logger; Cau ...

  6. BZOJ 2424 订货(贪心+单调队列)

    怎么题解都是用费用流做的啊...用单调队列多优美啊. 题意:某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初 ...

  7. MethodHandle

    JDK7为间接调用方法引入新的API,在java.lang.invoke包下,可以看作为反射的升级版,但它不像反射API那样显得冗长.繁重 主要的类 MethodHandle 方法句柄.对可直接执行的 ...

  8. 从原理上搞定编码(二)-- Web编码

    周末宅在家里睡完觉就吃饭,吃完饭接着睡觉,这日子过的实在是没劲啊.明明还有计划中的事情没有做, 为什么就是不想去做呢,这样的生活持续下去,必然会成为一个彻头彻尾的loser.上一篇写的 初识编码 ,这 ...

  9. Django 2.0 学习(16):Django ORM 数据库操作(下)

    Django ORM数据库操作(下) 一.增加表记录 对于表单有两种方式: # 方式一:实例化对象就是一条表记录france_obj = models.Student(name="海地&qu ...

  10. 洛谷 P2055 [ZJOI2009]假期的宿舍

    洛谷 P2055 题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C ...