问题描述: 在使用mybatis对数据库执行更新操作时,parameterType为某个具体的bean,而bean中传入的参数为null时,抛出异常如下:
2016-12-09 10:20
881 查看
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property=‘pxh‘, 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 #5 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型: 1111
问题描述:
在使用mybatis对数据库执行更新操作时,parameterType为某个具体的bean,而bean中传入的参数为null时,抛出异常如上:
mapper文件中代码如下:
<update id="update" parameterType="com.hsoft.mss.xtgl.model.Bean"> update table <set> pxh = #{pxh}, // 当pxh传入null时,抛出上述异常,pxh在bean中的类型为Long time = sysdate </set> where id = #{id} </update>
解决办法一:
经过对代码分析,是由于未指定传入参数pxh的类型,当mybatis接收到null时,无法将其正确的进行解析,进而导致上述异常。
将mapper中代码修改如下:
<update id="update" parameterType="com.hsoft.mss.xtgl.model.Bean"> update table <set> pxh = #{pxh,jdbcType=NUMERIC}, //将pxh的类型指定为NUMERIC即可 time = sysdate </set> where id = #{id,jdbcType=VARCHAR} </update>
解决办法二:
在配置文件mybatis-config.xml中加入如下代码:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> ... <settings> <setting name="jdbcTypeForNull" value="NULL" /> </settings> ... </configuration>
这样,即使传入参数为null,mybatis也能够将其转换成正确的数据类型,并进行存储操作。
附:常见的Jdbc Type 与 Java Type之间的关系
JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR String NUMERIC java.math.BigDecimal DECIMAL java.math.BigDecimal BIT boolean BOOLEAN boolean TINYINT byte SMALLINT short INTEGER int BIGINT long REAL float FLOAT double DOUBLE double BINARY byte[] VARBINARY byte[] LONGVARBINARY byte[] DATE java.sql.Date TIME java.sql.Time TIMESTAMP java.sql.Timestamp CLOB Clob BLOB Blob ARRAY Array
相关文章推荐
- 【异常】关于使用ES的RestHighLevel JavaAPI执行search操作时,参数的问题
- 在Mybatis中,使用bean传值,当传入值为Null时,提示“无效的列类型”的解决办法
- 解决MyBatis进行数据库操作时因参数过长导致打印日志过长的问题
- 关于mybatis 传入基本参数类型使用if test 判断出错的问题
- Oracle数据库案例整理-执行Oracle脚本失败或异常-SQL命令中字符串参数使用双引号导致更新数据库表信息失败
- mybatis 使用 parameterType="Map" 传入值后 数据库中得到的却是 NULL
- Mybatis:使用bean传值,当传入值为Null时,提示“无效的列类型”的解决办法
- Mybatis:使用bean传值,当传入值为Null时,提示“无效的列类型”的解决办法
- 解决使用MyBatis只传入一个String类型的参数时出现异常
- Mybatis:使用bean传值,当传入值为Null时,提示“无效的列类型”的解决办法
- Android 数据库 在使用 update更新的时候,总是无法更新,还没有异常抛出!
- ADO.NET Entity framework 中 实体的对应数据库中text类型的问题 (更新) :asp.net entity 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。参数 3 ("@0"): 数据类型 0
- 解决mybatis执行SQL语句部分参数返回NULL问题
- Java使用MyBatis传入参数的问题
- Android 数据库 在使用 update更新的时候,总是无法更新,还没有异常抛出!
- 关于SubSonic3.0插件使用实体进行更新操作时(执行T.Update()或T.Save()),某些列无法进行修改操作的问题处理
- Java访问DotNet平台WCF服务,使用自定义对象如IDictionary做参数时,抛出"Did not understand MustUnderstand"异常
- asp.net使用参数(parameters)的方法执行数据库操作例子
- 艾伟_转载:使用LINQ to SQL更新数据库(上):问题重重
- 使用AJAX调用数据库不刷新更新页面问题