请我mybatis在<jdbc insert null>的时候,如果参数为null是不是要指定jdbctype啊

随笔 - 393&
文章 - 0&评论 - 0&trackbacks - 0
前天遇到一个问题 异常显示如下:&
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如下:&
&&&&&&insert&into&customer_log&&
&&&&&&ID,&&
&&&&&&CUSTOMER_SERVICE_USER_NAME,&&
&&&&&&user_name,&&
&&&&&&CONTENT,&&
&&&&&&LOG_FIRST_TYPE,&&
&&&&&&STATUS,&&
&&&&&&LINKED_ID,&&
&&&&&&FEE,&&
&&&&&&ACCOUNT_FIRST_TYPE,&&
&&&&&&ACCOUNT_SECOND_TYPE,&&
&&&&&&ACCOUNT_THIRD_TYPE,&&
&&&&&&LOG_SECOND_TYPE,&&
&&&&&&LOG_IP,&&
&&&&&&MEMO&&
&&&&&&values&&
&&&&&&&&&&&&&seq_customer_log.nextval&,&&
&&&&&&&&&&&&#{customerServiceUserName}&,&&
&&&&&&&&&&&&#{username},&&
&&&&&&&&&&&&#{content},&&
&&&&&&&&&&&&#{logFirstType},&&
&&&&&&&&&&&&#{status},&&
&&&&&&&&&&&&#{linkedId},&&
&&&&&&&&&&&&#{fee},&&
&&&&&&&&&&&&#{accountFirstType},&&
&&&&&&&&&&&&#{accountSecondType},&&
&&&&&&&&&&&&#{accountThirdType},&&
&&&&&&&&&&&&#{logSecondType},&&
&&&&&&&&&&&&#{logIp},&&
&&&&&&&&&&&&#{memo}&&
查询了一下 一些资料说是:&
MyBatis 插入空值时,需要指定JdbcType&mybatis insert空值报空值异常,但是在pl/sql不会提示错误,主要原因是mybatis无法进行转换,&
所以将xml改为:&
&&&&&&&&insert&into&customer_log&&
&&&&&&&&&&&&&&&(&&
&&&&&&&&&&&&&&&ID,&&
&&&&&&&&&&&&&&&CUSTOMER_SERVICE_USER_NAME,&&
&&&&&&&&&&&&&&&user_name&,&&
&&&&&&&&&&&&&&&CONTENT,&&
&&&&&&&&&&&&&&&LOG_FIRST_TYPE,&&
&&&&&&&&&&&&&&&STATUS,&&
&&&&&&&&&&&&&&&LINKED_ID,&&
&&&&&&&&&&&&&&&FEE,&&
&&&&&&&&&&&&&&&ACCOUNT_FIRST_TYPE,&&
&&&&&&&&&&&&&&&ACCOUNT_SECOND_TYPE,&&
&&&&&&&&&&&&&&&ACCOUNT_THIRD_TYPE,&&
&&&&&&&&&&&&&&&LOG_SECOND_TYPE,&&
&&&&&&&&&&&&&&&LOG_IP,&&
&&&&&&&&&&&&&&&MEMO&&
&&&&&&&&&&&&&&&)&&
&&&&&&&&&&&&&&&values&&
&&&&&&&&&&&&&&&(&&
&&&&&&&&&&&&&&&seq_customer_log.nextval&,&&
&&&&&&&&&&&&&&&#{customerServiceUserName,jdbcType=VARCHAR}&,&&
&&&&&&&&&&&&&&&#{username,jdbcType=VARCHAR},&&
&&&&&&&&&&&&&&&#{content,jdbcType=VARCHAR},&&
&&&&&&&&&&&&&&&#{logFirstType,jdbcType=NUMERIC},&&
&&&&&&&&&&&&&&&#{status,jdbcType=NUMERIC},&&
&&&&&&&&&&&&&&&#{linkedId,jdbcType=VARCHAR},&&
&&&&&&&&&&&&&&&#{fee,jdbcType=NUMERIC},&&
&&&&&&&&&&&&&&&#{accountFirstType,jdbcType=NUMERIC},&&
&&&&&&&&&&&&&&&#{accountSecondType,jdbcType=NUMERIC},&&
&&&&&&&&&&&&&&&#{accountThirdType,jdbcType=NUMERIC},&&
&&&&&&&&&&&&&&&#{logSecondType,jdbcType=NUMERIC},&&
&&&&&&&&&&&&&&&#{logIp,jdbcType=VARCHAR},&&
&&&&&&&&&&&&&&&#{memo,jdbcType=VARCHAR}&&
&&&&&&&&&&&&&&&)&&
这个时候 运行正常。&我不甘心 想试试 ibatis2 是否也有同样的问题&xml如下:&
&&&&&&&&&&&&&&&&insert&into&customer_log&&
&&&&&&&&&&&&&&&&(&&
&&&&&&&&&&&&&&&&ID,&&
&&&&&&&&&&&&&&&&CUSTOMER_SERVICE_USER_NAME,&&
&&&&&&&&&&&&&&&&user_name,&&
&&&&&&&&&&&&&&&&CONTENT,&&
&&&&&&&&&&&&&&&&LOG_FIRST_TYPE,&&
&&&&&&&&&&&&&&&&STATUS,&&
&&&&&&&&&&&&&&&&LINKED_ID,&&
&&&&&&&&&&&&&&&&FEE,&&
&&&&&&&&&&&&&&&&ACCOUNT_FIRST_TYPE,&&
&&&&&&&&&&&&&&&&ACCOUNT_SECOND_TYPE,&&
&&&&&&&&&&&&&&&&ACCOUNT_THIRD_TYPE,&&
&&&&&&&&&&&&&&&&LOG_SECOND_TYPE,&&
&&&&&&&&&&&&&&&&LOG_IP,&&
&&&&&&&&&&&&&&&&MEMO&&
&&&&&&&&&&&&&&&&)&&
&&&&&&&&&&&&&&&&values&&
&&&&&&&&&&&&&&&&(&&
&&&&&&&&&&&&&&&&&&&&&seq_customer_log.nextval&,&&
&&&&&&&&&&&&&&&&&&&&&&#customerServiceUserName#&,&&
&&&&&&&&&&&&&&&&&&&&&&#username#,&&
&&&&&&&&&&&&&&&&&&&&&&#content#,&&
&&&&&&&&&&&&&&&&&&&&&&#logFirstType#,&&
&&&&&&&&&&&&&&&&&&&&&&#status#,&&
&&&&&&&&&&&&&&&&&&&&&&#linkedId#,&&
&&&&&&&&&&&&&&&&&&&&&&#fee#,&&
&&&&&&&&&&&&&&&&&&&&&&#accountFirstType#,&&
&&&&&&&&&&&&&&&&&&&&&&#accountSecondType#,&&
&&&&&&&&&&&&&&&&&&&&&&#accountThirdType#,&&
&&&&&&&&&&&&&&&&&&&&&&#logSecondType#,&&
&&&&&&&&&&&&&&&&&&&&&&#logIp#,&&
&&&&&&&&&&&&&&&&&&&&&&#memo#&&
&&&&&&&&&&&&&&&&)&&
这个时候 发现 ibatis2 可以正常的执行 数据库可以正常的插入数据 。&错误日志是在:org.apache.ibatis.type.BaseTypeHandler这个类的第17行打出的。根据异常上面的代码&
Java代码&&
if&(parameter&==&null)&{&&
&&if&(jdbcType&==&null)&{&&
&&ps.setNull(i,&JdbcType.OTHER.TYPE_CODE);&&
&&}&catch&(SQLException&e)&{&&
&&throw&new&TypeException("Error&setting&null&parameter.&Most&JDBC&drivers&require&that&the&JdbcType&must&be&specified&for&all&nullable&parameters.&Cause:&"&+&e,&e);&&
&&}&else&{&&
&&ps.setNull(i,&jdbcType.TYPE_CODE);&&
&&}&else&{&&
&&setNonNullParameter(ps,&i,&parameter,&jdbcType);&&
可以看出,是因为你传入的参数的字段为null对象无法获取对应的jdbcType类型,而报的错误。&你只要在insert语句中insert的对象加上jdbcType就可以了,修改如下:&#{menuTitle,jdbcType=VARCHAR}&这样就可以解决以上错误了。&看来需要真正的了解mybatis 和ibatis 呀。&希望遇到同样问题的朋友一起交流。&晚上看到了/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可解决(注意大小写)&/p/mybatis/issues/detail?id=224&q=Error%20setting%20null%20parameter&colspec=ID
阅读(...) 评论()mybatis,查询传入参数为Map,无效的列类型,空指针异常_百度知道
mybatis,查询传入参数为Map,无效的列类型,空指针异常
&#47: 无效的列类型查询xml报错信息.HashMap&quot. Cause:&lt:ERROR - Exception occurred durin &lt.entity.Student& nested exception is java.student where stu_id = #{stu_id} and sys_pwd = #{sys_pwd} ]]& resultType=&quot![CDATA[
select * from ${schema}: Error setting null for parameter #1 with JdbcType OTHER .我debug查看了map传入前的值; parameterType=&quot.SQLE error code [17004]; 无效的列类型; &select&gt.sql.SQLE; SQL state [null]: uncategorized SQLException for SQL [].&java,但是传入之后就报错;login&quot.sql: 无效的列类型,两个参数都不是空的,这两个字段在数据库里都是varchar类型的. Try setting a different JdbcType for this parameter or a different jdbcTypeForNull coselect id=&quot
提问者采纳
parameterType=& resultType=&quot.exam.util&;select id=&login&com./&gt.Student&
&lt.Map&java.student where stu_id = ${stu_id} and sys_pwd = ${sys_pwd}
]]&select&gt![CDATA[
select * from ${schema}
为什么不能用#{stu_id},这两种取法有什么不同
#{stu_id}这么调用,在xml里必须有声明,如&result column=&stu_id& property=&stuId& jdbcType=&INTEGER& /&然后这么用
stu_id = #{stuId,jdbcType=INTEGER}${stu_id} 这个用的就随意些,只要你map传进来的key和stu_id一样就行了还有${schema}.student这样用不报错吗?
${schema}.student,schema我定义在properties中,作为模式名的配置。我数据库里面有个人的登录名叫
“admin”的,
然后,在页面登录,提示用户名密码错误,我看了后台日志,确实没取到数据
但是,我在pl/sql中运行select语句,和上面的差不多,能把数据取出来,后面,我把
登录名改为
admin1,页面上就可以登录了oracle
提问者评价
还没回答另一个问题呢
其他类似问题
为您推荐:
mybatis的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁> MyBatis Oracle Error setting null parameter 的解决办法
MyBatis Oracle Error setting null parameter 的解决办法
leoday82816 & &
发布时间: & &
浏览:1 & &
回复:0 & &
悬赏:0.0希赛币
MyBatis Oracle Error setting null parameter 的解决方法
适配oracle数据库的时候,mybatis报了Error setting null parameter,bug发现是参数出现了null值,对于Mybatis,如果进行操作的时候,没有指定jdbcType类型的参数,就可能导致问题。 postgreSQL,MySQL,SQLSERVER都支持JdbcType.NULL类型,Oracle是不支持,适配的时候也因为这个问题导致mybatis报错。例如用代码生成工具生成的插入&insert id="insert" parameterType="cmcc.om.log.entity.Log" &&&& insert into OM_LOG (ID, USER_ID, APP_ID, &&&&& LOG_OBJECT, LOG_OPERATION, PLATFORM_LOGID, &&&&& LOG_TYPE, LOG_LEVEL, LOG_TIME&&&&& )&&& values (#{id,jdbcType=CHAR}, #{userId,jdbcType=OTHER}, #{appId,jdbcType=OTHER}, &&&&& #{logObject,jdbcType=OTHER}, #{logOperation,jdbcType=OTHER}, #{platformLogid,jdbcType=OTHER}, &&&&& #{logType,jdbcType=DECIMAL}, #{logLevel,jdbcType=DECIMAL}, #{logTime,jdbcType=DATE}&&&&& )& &/insert&或有#{userId,jdbcType=OTHER} ,这样虽然oracle设置值可以为空还是会报错,如果是字符类型改成#{userId,jdbcType=VARCHAR}就没问题了,日期类型就改成DATE,反正就是改成本来的类型,OTHER的话Oracle比较傻,不知道怎么办
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

我要回帖

更多关于 jdbc insert null 的文章

 

随机推荐